CmGetMatchingFilteredDeviceList

NTSTATUS __stdcall CmGetMatchingFilteredDeviceList(
        HPNPCTX *hPnpCtx,
        const WCHAR *FilterString,
        _CM_DEVICE_LIST_FILTER FilterFlags,
        UINT8 *MatchCallbackRoutine,
        HPNPCTX *a5,
        const WCHAR *a6,
        _CM_OBJECT_TYPE a7,
        VOID *a8,
        VOID *MatchCallbackContext,
        WCHAR *Buffer,
        UINT64 BufferLength,
        UINT64 *RequiredLength,
        UINT64 Flags){
  __int64(__fastcall *v17)(HPNPCTX *, _QWORD, __int64, __int64, int, UINT64 *); 
  HPNPCTX *v18; 
  int v19; 
  NTSTATUS v20; 
  NTSTATUS MatchingFilteredDeviceListWorker; 
  int v23; 
  int v24; 
  NTSTATUS v25; 
  VOID *v26; 
  WCHAR *v27; 
  UINT64 *v29; 
  UINT64 v30[12]; 

  memset(v30, 0i64, 0x58u);
  v17 = (__int64(__fastcall *)(HPNPCTX *, _QWORD, __int64, __int64, int, UINT64 *))*((_QWORD *)hPnpCtx + 63);
  LODWORD(v30[9]) = 0;
  v30[2] = (UINT64)FilterString;
  LODWORD(v30[3]) = FilterFlags;
  v30[4] = (UINT64)MatchCallbackRoutine;
  v30[6] = (UINT64)a6;
  v18 = hPnpCtx;
  v30[8] = (UINT64)a8;
  v30[5] = (UINT64)a5;
  LODWORD(v30[7]) = a7;
  if( v17 )
  {
    v19 = v17(hPnpCtx, 0i64, 1i64, 16i64, 1, v30);
    if( v19 == -1073741822 )
    {
      v17 = 0i64;
    }
    else
    {
      if( v19 == -1073741536 )
        return v30[0];
      if( v19 )
        return -1073741595;
    }
  }
  LODWORD(v26) = v30[9];
  MatchingFilteredDeviceListWorker = CmGetMatchingFilteredDeviceListWorker(
                                       hPnpCtx,
                                       (const WCHAR *)v30[2],
                                       v30[3],
                                       (UINT8 *)v30[4],
                                       (HPNPCTX *)v30[5],
                                       (const WCHAR *)v30[6],
                                       v30[7],
                                       (VOID *)v30[8],
                                       v26,
                                       v27,
                                       (UINT64)hPnpCtx,
                                       v29,
                                       v30[0]);
  v20 = MatchingFilteredDeviceListWorker;
  if( v17 )
  {
    LODWORD(v30[0]) = MatchingFilteredDeviceListWorker;
    v23 = v17(v18, 0i64, 1i64, 16i64, 2, v30);
    v24 = v23;
    if( v23 != -1073741822 )
    {
      if( v23 == -1073741536 )
        return v30[0];
      v25 = v20;
      if( v24 )
        return -1073741595;
      return v25;
    }
  }
  return v20;
}

Referenced by:

CmDeleteInstallerClassWorker
IopGetRootDevices
PiCMGetDeviceIdList
PiDevCfgInitDriverDatabaseCallback
PipResetDevices