CmGetCommonClassRegKeyPath
VOID __stdcall CmGetCommonClassRegKeyPath(
INT64 a1,
const WCHAR *a2,
INT16 a3,
INT64 a4,
INT64 a5,
WCHAR *pszDest,
size_t cchDest,
INT64 a8){
int v8;
int v11;
NTSTATUS v12;
const wchar_t *v13;
__int64 v14;
__int64 v15;
unsigned __int64 v16;
UINT64 v17;
WCHAR *v18;
__int64 v19;
__int64 v20;
unsigned __int64 v21;
WCHAR *pszFormat;
__int64 v23;
__int64 v24;
unsigned __int64 v25;
UINT64 dwFlags;
v8 = a4;
if( (a3 & 0x60) == 96 )
return;
if( (unsigned __int8)a3 == 32 )
{
v11 = (unsigned __int8)a3 - 30;
v12 = CmValidateInstallerClassName((WCHAR *)a1);
}
else
{
if( (unsigned __int8)a3 != 64 )
return;
v11 = 4;
v12 = CmValidateInstallerClassName((WCHAR *)a1);
}
if( v12 < 0 )
return;
v13 = L"System\\CurrentControlSet\\Control\\Class";
if( v11 != 2 )
v13 = L"System\\CurrentControlSet\\Control\\DeviceClasses";
if( (a3 & 0x200) != 0 )
{
if( v8 )
{
if( v8 == -1 )
return;
v23 = -1i64;
v24 = -1i64;
do
++v24;
while( v13[v24] );
v25 = v24 + 49;
if( a2 )
{
do
++v23;
while( a2[v23] );
v25 += v23 + 1;
}
if( v25 > 0xFFFFFFFF )
return;
if( a8 )
*(_DWORD *)a8 = v25;
if( (unsigned int)v25 > cchDest )
return;
v17 = cchDest;
v18 = pszDest;
if( a2 )
{
LODWORD(dwFlags) = 2048;
RtlStringCchPrintfExW(pszDest, cchDest, 0i64, 0i64, dwFlags, (WCHAR *)L"%s\\%04u\\%s\\%s");
return;
}
pszFormat = L"%s\\%04u\\%s";
}
else
{
v19 = -1i64;
v20 = -1i64;
do
++v20;
while( v13[v20] );
v21 = v20 + 52;
if( a2 )
{
do
++v19;
while( a2[v19] );
v21 += v19 + 1;
}
if( v21 > 0xFFFFFFFF )
return;
if( a8 )
*(_DWORD *)a8 = v21;
if( (unsigned int)v21 > cchDest )
return;
v17 = cchDest;
v18 = pszDest;
if( !a2 )
{
LABEL_18:
LODWORD(dwFlags) = 2048;
RtlStringCchPrintfExW(v18, v17, 0i64, 0i64, dwFlags, (WCHAR *)L"%s\\%s");
return;
}
pszFormat = (WCHAR *)L"%s\\%s\\%s";
}
LODWORD(dwFlags) = 2048;
RtlStringCchPrintfExW(v18, v17, 0i64, 0i64, dwFlags, pszFormat);
return;
}
v14 = -1i64;
v15 = -1i64;
do
++v15;
while( v13[v15] );
v16 = v15 + 1;
if( a2 )
{
do
++v14;
while( a2[v14] );
v16 += v14 + 1;
}
if( v16 <= 0xFFFFFFFF )
{
if( a8 )
*(_DWORD *)a8 = v16;
if( (unsigned int)v16 <= cchDest )
{
v17 = cchDest;
v18 = pszDest;
if( !a2 )
{
LODWORD(dwFlags) = 2048;
RtlStringCchPrintfExW(pszDest, cchDest, 0i64, 0i64, dwFlags, (WCHAR *)L"%s");
return;
}
goto LABEL_18;
}
}
}Referenced by:
CmDeleteCommonClassRegKeyWorker
CmOpenCommonClassRegKeyWorker
PiDqGetRelativeObjectRegPath