CmGetDeviceCompoundFilters

NTSTATUS __stdcall CmGetDeviceCompoundFilters(
        INT64 a1,
        WCHAR *a2,
        VOID *a3,
        INT64 r9,
        UINT64 *a5,
        WCHAR *a6,
        INT64 a7,
        UINT64 *a8){
  NTSTATUS v8; 
  const DEVPROPKEY *v13; 
  NTSTATUS DeviceCompoundFiltersWorker; 
  VOID *v15; 
  __int64 v16; 
  int v17; 
  __int64 v19; 
  UINT64 DesiredAccess; 
  INT64 v21; 
  _REPARSE_DATA_BUFFER *ReparseBuffer; 
  VOID *Handle; 

  v8 = 0;
  ReparseBuffer = 0i64;
  Handle = 0i64;
  if( *(_DWORD *)(r9 + 16) != 22 )
    goto LABEL_2;
  v19 = *(_QWORD *)r9 - DEVPKEY_Device_CompoundUpperFilters;
  if( *(_QWORD *)r9 == DEVPKEY_Device_CompoundUpperFilters )
    v19 = *(_QWORD *)(r9 + 8) - 0x293B573F92A15394i64;
  v13 = &DEVPKEY_Device_UpperFilters;
  if( v19 )
LABEL_2:
    v13 = &DEVPKEY_Device_LowerFilters;
  if( a3 )
  {
    v15 = a3;
    ReparseBuffer = (_REPARSE_DATA_BUFFER *)a3;
  }
  else
  {
    LODWORD(DesiredAccess) = 33554433;
    DeviceCompoundFiltersWorker = CmOpenDeviceRegKey(
                                    (HPNPCTX *)a1,
                                    a2,
                                    CM_KEY_TYPE_DEVICE_INSTANCE,
                                    0i64,
                                    DesiredAccess,
                                    0,
                                    (VOID **)&ReparseBuffer,
                                    0i64);
    if( DeviceCompoundFiltersWorker < 0 )
    {
LABEL_27:
      v8 = DeviceCompoundFiltersWorker;
      goto LABEL_11;
    }
    v15 = ReparseBuffer;
  }
  if( a1 )
    v16 = *(_QWORD *)(a1 + 224);
  else
    v16 = 0i64;
  if( SysCtxRegOpenKey(v16, v15, L"Filters", 0, 0x2001Fu, &Handle) >= 0 )
  {
    LODWORD(v21) = a7;
    DeviceCompoundFiltersWorker = CmGetDeviceCompoundFiltersWorker(
                                    a1,
                                    a2,
                                    (INT64)ReparseBuffer,
                                    Handle,
                                    r9,
                                    (INT64)v13,
                                    (INT64)a5,
                                    a6,
                                    v21,
                                    (INT64)a8);
    if( DeviceCompoundFiltersWorker != -1073741772
      && DeviceCompoundFiltersWorker != -1073741444
      && DeviceCompoundFiltersWorker != -1073741275 )
    {
      if( DeviceCompoundFiltersWorker >= 0 )
        goto LABEL_11;
      goto LABEL_27;
    }
  }
  CmGetDeviceMappedPropertyFromRegProp((_IRP *)a1, (_FILE_OBJECT *)a2, ReparseBuffer);
  if( v17 < 0 )
    v8 = v17;
LABEL_11:
  if( Handle )
    ZwClose((_HANDLE)Handle);
  if( ReparseBuffer && !a3 )
    ZwClose((_HANDLE)ReparseBuffer);
  return v8;
}

Referenced by:

CmGetDeviceMappedPropertyFromComposite