CmGetInstallerClassCompoundFilters
__int64 __fastcall CmGetInstallerClassCompoundFilters(
INT64 a1,
WCHAR *a2,
VOID *a3,
INT64 a4,
UINT64 *PropertyType,
UINT8 *PropertyBuffer,
UINT64 a7,
INT64 a8){
_DEVPROPKEY *v12;
NTSTATUS v13;
VOID *v14;
__int64 v15;
NTSTATUS v16;
UINT64 *PropertySize;
int v18;
NTSTATUS InstallerClassMappedPropertyFromRegProp;
__int64 v21;
VOID **ClassKey;
UINT64 *Disposition;
VOID **BufferSize;
INT64 v25;
VOID *ObjectBaseKey;
VOID *Handle;
ObjectBaseKey = 0i64;
Handle = 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 = (_DEVPROPKEY *)&DEVPKEY_DeviceClass_UpperFilters;
if( v21 )
LABEL_2:
v12 = (_DEVPROPKEY *)&DEVPKEY_DeviceClass_LowerFilters;
if( a3 )
{
v14 = a3;
ObjectBaseKey = a3;
}
else
{
BufferSize = &ObjectBaseKey;
LOBYTE(Disposition) = 0;
LODWORD(ClassKey) = 33554433;
v13 = CmOpenInstallerClassRegKey((HPNPCTX *)a1, a2, 0i64, a4, ClassKey, Disposition);
if( v13 < 0 )
goto LABEL_11;
v14 = ObjectBaseKey;
}
if( a1 )
v15 = *(_QWORD *)(a1 + 224);
else
v15 = 0i64;
v16 = SysCtxRegOpenKey(v15, v14, L"Filters", 0, 0x2001Fu, &Handle);
PropertySize = (UINT64 *)a8;
v13 = v16;
v18 = a7;
if( v16 < 0
|| (LODWORD(v25) = a7,
InstallerClassMappedPropertyFromRegProp = CmGetInstallerClassCompoundFiltersWorker(
a1,
(INT64)a2,
ObjectBaseKey,
Handle,
a4,
(INT64)v12,
(INT64)PropertyType,
(WCHAR *)PropertyBuffer,
v25,
a8),
InstallerClassMappedPropertyFromRegProp == -1073741772)
|| InstallerClassMappedPropertyFromRegProp == -1073741444
|| InstallerClassMappedPropertyFromRegProp == -1073741275 )
{
LODWORD(BufferSize) = v18;
InstallerClassMappedPropertyFromRegProp = CmGetInstallerClassMappedPropertyFromRegProp(
(HPNPCTX *)a1,
a2,
ObjectBaseKey,
v12,
PropertyType,
PropertyBuffer,
(UINT64)BufferSize,
PropertySize);
}
else if( InstallerClassMappedPropertyFromRegProp >= 0 )
{
goto LABEL_11;
}
v13 = InstallerClassMappedPropertyFromRegProp;
LABEL_11:
if( ObjectBaseKey && !a3 )
ZwClose((_HANDLE)ObjectBaseKey);
if( Handle )
ZwClose((_HANDLE)Handle);
return(unsigned int)v13;
}Referenced by:
CmGetInstallerClassMappedPropertyFromComposite