CmGetInstallerClassCompoundFilters
__int64 __fastcall CmGetInstallerClassCompoundFilters(
__int64 a1,
const WCHAR *a2,
char *a3,
__int64 a4,
_DWORD *a5,
wchar_t *a6,
int a7,
unsigned int *a8){
const DEVPROPKEY *v12;
int v13;
char *v14;
__int64 v15;
int v16;
unsigned int *v17;
int v18;
int InstallerClassMappedPropertyFromRegProp;
__int64 v21;
HANDLE Handle;
HANDLE v23;
Handle = 0i64;
v23 = 0i64;
if( *(_DWORD *)(a4 + 16) != 20 )
goto LABEL_2;
v21 = *(_QWORD *)a4 - DEVPKEY_DeviceClass_CompoundUpperFilters;
if( *(_QWORD *)a4 == DEVPKEY_DeviceClass_CompoundUpperFilters )
v21 = *(_QWORD *)(a4 + 8) - 0x4B88D2ECD9DBB9A9i64;
v12 = &DEVPKEY_DeviceClass_UpperFilters;
if( v21 )
LABEL_2:
v12 = &DEVPKEY_DeviceClass_LowerFilters;
if( a3 )
{
v14 = a3;
Handle = a3;
}
else
{
v13 = CmOpenInstallerClassRegKey(a1, a2, 0i64, a4, 33554433, 0, (__int64)&Handle, 0i64);
if( v13 < 0 )
goto LABEL_11;
v14 = (char *)Handle;
}
if( a1 )
v15 = *(_QWORD *)(a1 + 224);
else
v15 = 0i64;
v16 = SysCtxRegOpenKey(v15, v14, L"Filters", 0, 0x2001Fu, &v23);
v17 = a8;
v13 = v16;
v18 = a7;
if( v16 < 0
|| (InstallerClassMappedPropertyFromRegProp = CmGetInstallerClassCompoundFiltersWorker(
a1,
(__int64)a2,
(__int64)Handle,
v23,
a4,
(__int64)v12,
(__int64)a5,
(__int64)a6,
a7,
(__int64)a8),
InstallerClassMappedPropertyFromRegProp == -1073741772)
|| InstallerClassMappedPropertyFromRegProp == -1073741444
|| InstallerClassMappedPropertyFromRegProp == -1073741275 )
{
InstallerClassMappedPropertyFromRegProp = CmGetInstallerClassMappedPropertyFromRegProp(
a1,
(__int64)a2,
(__int64)Handle,
(__int64)v12,
a5,
a6,
v18,
v17);
}
else if( InstallerClassMappedPropertyFromRegProp >= 0 )
{
goto LABEL_11;
}
v13 = InstallerClassMappedPropertyFromRegProp;
LABEL_11:
if( Handle && !a3 )
ZwClose(Handle);
if( v23 )
ZwClose(v23);
return(unsigned int)v13;
}Referenced by:
CmGetInstallerClassMappedPropertyFromComposite