CmGetDeviceSoftwareKeyPath
void __fastcall CmGetDeviceSoftwareKeyPath(
__int64 a1,
const WCHAR *a2,
__int16 a3,
int a4,
char a5,
NTSTRSAFE_PWSTR pszDest,
size_t cchDest,
__int64 a8){
__int64 v10;
unsigned __int64 v11;
__int64 v12;
unsigned __int64 v13;
const wchar_t *v14;
__int64 v15;
unsigned __int64 v16;
const WCHAR *pszFormat;
__int64 v18;
unsigned __int64 v19;
__int64 v20;
unsigned __int64 v21;
__int64 v22;
unsigned __int64 v23;
UINT64 dwFlags;
const wchar_t *v25;
const wchar_t *v26;
const WCHAR *v27;
__int16 *v28;
const WCHAR *v29;
__int16 *v30;
__int16 v31[48];
if( !*(_BYTE *)(a1 + 4) )
{
if( (int)CmGetDeviceSoftwareKey(a1, a2, (wchar_t *)v31, (__int64)a2, a5) < 0 )
return;
if( (a3 & 0x200) == 0 )
{
v10 = -1i64;
do
++v10;
while( v31[v10] );
v11 = v10 + 40;
if( v11 <= 0xFFFFFFFF )
{
if( a8 )
*(_DWORD *)a8 = v11;
if( (unsigned int)v11 <= (unsigned int)cchDest )
{
LODWORD(dwFlags) = 2048;
RtlStringCchPrintfExW(
pszDest,
(unsigned int)cchDest,
0i64,
0i64,
dwFlags,
L"%s\\%s",
L"System\\CurrentControlSet\\Control\\Class",
v31);
}
}
return;
}
if( !a4 )
{
v12 = -1i64;
do
++v12;
while( v31[v12] );
v13 = v12 + 91;
if( v13 <= 0xFFFFFFFF )
{
if( a8 )
*(_DWORD *)a8 = v13;
if( (unsigned int)v13 <= (unsigned int)cchDest )
{
v28 = v31;
v27 = L"System\\CurrentControlSet\\Control\\Class";
v14 = L"System\\CurrentControlSet\\Hardware Profiles\\Current";
LABEL_21:
LODWORD(dwFlags) = 2048;
RtlStringCchPrintfExW(
pszDest,
(unsigned int)cchDest,
0i64,
0i64,
dwFlags,
(const WCHAR *)L"%s\\%s\\%s",
v14,
v27,
v28);
return;
}
}
return;
}
if( a4 == -1 )
return;
v22 = -1i64;
do
++v22;
while( v31[v22] );
v23 = v22 + 88;
if( v23 > 0xFFFFFFFF )
return;
if( a8 )
*(_DWORD *)a8 = v23;
if( (unsigned int)v23 > (unsigned int)cchDest )
return;
v30 = v31;
v29 = L"System\\CurrentControlSet\\Control\\Class";
LODWORD(v26) = a4;
v25 = L"System\\CurrentControlSet\\Hardware Profiles";
pszFormat = L"%s\\%04u\\%s\\%s";
LABEL_32:
LODWORD(dwFlags) = 2048;
RtlStringCchPrintfExW(pszDest, (unsigned int)cchDest, 0i64, 0i64, dwFlags, pszFormat, v25, v26, v29, v30);
return;
}
if( (a3 & 0x200) != 0 )
{
if( a4 )
{
if( a4 != -1 )
{
v18 = -1i64;
do
++v18;
while( a2[v18] );
v19 = v18 + 97;
if( v19 <= 0xFFFFFFFF )
{
if( a8 )
*(_DWORD *)a8 = v19;
if( (unsigned int)v19 <= (unsigned int)cchDest )
{
LODWORD(dwFlags) = 2048;
RtlStringCchPrintfExW(
pszDest,
(unsigned int)cchDest,
0i64,
0i64,
dwFlags,
L"%s\\%04u\\%s\\%s\\%s",
L"System\\CurrentControlSet\\Hardware Profiles",
a4,
L"System\\CurrentControlSet\\Enum",
a2,
L"Driver Parameters");
}
}
}
return;
}
v15 = -1i64;
do
++v15;
while( a2[v15] );
v16 = v15 + 100;
if( v16 > 0xFFFFFFFF )
return;
if( a8 )
*(_DWORD *)a8 = v16;
if( (unsigned int)v16 > (unsigned int)cchDest )
return;
v30 = L"Driver Parameters";
v29 = a2;
v26 = L"System\\CurrentControlSet\\Enum";
v25 = L"System\\CurrentControlSet\\Hardware Profiles\\Current";
pszFormat = L"%s\\%s\\%s\\%s";
goto LABEL_32;
}
v20 = -1i64;
do
++v20;
while( a2[v20] );
v21 = v20 + 49;
if( v21 <= 0xFFFFFFFF )
{
if( a8 )
*(_DWORD *)a8 = v21;
if( (unsigned int)v21 <= (unsigned int)cchDest )
{
v28 = L"Driver Parameters";
v14 = L"System\\CurrentControlSet\\Enum";
v27 = a2;
goto LABEL_21;
}
}
}Referenced by:
CmGetDeviceRegKeyPath