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