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