PiPnpRtlGetFilteredDeviceList

INT64 __fastcall PiPnpRtlGetFilteredDeviceList(INT64 a1){
  int v1; 
  WCHAR *PoolWithTag; 
  WCHAR *v4; 
  bool v5; 
  char v6; 
  _WORD *v7; 
  int inited; 
  WCHAR *v11; 
  __int64 v12; 
  char v13; 
  int CmObjectListFromCache; 
  PVOID v15; 
  ULONG v16; 
  __int64 v17; 
  char v18; 
  int v19; 
  WCHAR *v20; 
  int v21; 
  WCHAR *v22; 
  __int64 v23; 
  char v24; 
  int pcchRemaining; 
  int pcchRemaininga; 
  UINT64 dwFlags; 
  __int64 dwFlagsa; 
  __int64 dwFlagsb; 
  __int64 dwFlagsc; 
  UINT64 *v31; 
  struct _UNICODE_STRING DestinationString; 
  INT64 v33[2]; 
  __int128 v34; 
  __int64 r8_0; 
  char v36; 
  int v37; 
  __int16 v38; 
  char v39; 
  PVOID P; 
  __int64 v41; 
  __int64 v42; 
  __int64 v43; 
  size_t v44; 
  NTSTRSAFE_PWSTR ppszDestEnd; 
  v1 = *(_DWORD *)(a1 + 24);
  v37 = 0;
  v38 = 0;
  v39 = 0;
  PoolWithTag = 0i64;
  HIDWORD(v41) = 0;
  ppszDestEnd = 0i64;
  v44 = 0i64;
  *(_OWORD *)v33 = 0i64;
  v34 = 0i64;
  DestinationString = 0i64;
  if( (v1 & 0x7C) != 0 )
  {
    inited = -1073741802;
LABEL_30:
    if( PoolWithTag )
    {
      v16 = 1198550608;
      v15 = PoolWithTag;
      goto LABEL_15;
    }
  }
  else
  {
    if( (v1 & 1) != 0 )
    {
      v20 = *(WCHAR **)(a1 + 16);
      if( v20 )
      {
        v21 = 0;
        while( *v20 )
        {
          if( *v20 == 92 )
            break;
          if( (unsigned int)++v21 > 2 )
            break;
          v22 = wcschr(v20, 0x5Cu);
          if( v22 )
          {
            v20 = v22 + 1;
            if( v20 )
              continue;
          }
          PoolWithTag = (WCHAR *)ExAllocatePoolWithTag(PagedPool, 0x190ui64, 0x47706E50ui64);
          if( !PoolWithTag )
            return(unsigned int)-1073741670;
          LODWORD(dwFlags) = 2048;
          inited = RtlStringCchCopyExW(PoolWithTag, 0xC8ui64, *(WCHAR **)(a1 + 16), &ppszDestEnd, &v44, dwFlags);
          if( inited >= 0 )
          {
            if( v44 < 2 )
            {
              inited = -1073741811;
            }
            else
            {
              *(_DWORD *)ppszDestEnd = 92;
              inited = RtlInitUnicodeStringEx(&DestinationString, PoolWithTag);
              if( inited >= 0 )
              {
                v23 = *(_QWORD *)(a1 + 48);
                v33[0] = (INT64)&DestinationString;
                v24 = BYTE1(*(_DWORD *)(a1 + 24)) & 1;
                *(_DWORD *)((char *)&v33[1] + 1) = 0;
                LOBYTE(v33[1]) = v24;
                v34 = *(_OWORD *)(a1 + 32);
                dwFlagsc = *(_QWORD *)(a1 + 64);
                pcchRemaininga = *(_DWORD *)(a1 + 56);
                *(_WORD *)((char *)&v33[1] + 5) = 0;
                HIBYTE(v33[1]) = 0;
                inited = PiDmGetCmObjectListFromCache(
                           1i64,
                           (__int64)PiPnpRtlEnumeratorFilterCallback,
                           (__int64)v33,
                           v23,
                           pcchRemaininga,
                           dwFlagsc);
              }
            }
          }
          goto LABEL_30;
        }
      }
      return(unsigned int)-1073741811;
    }
    if( (v1 & 2) == 0 )
    {
      if( (v1 & 0x80u) == 0 )
      {
        v17 = *(_QWORD *)(a1 + 48);
        v5 = (v1 & 0x100) != 0;
        *(_DWORD *)((char *)&v33[1] + 1) = 0;
        v18 = v33[1];
        if( v5 )
          v18 = 1;
        *(_WORD *)((char *)&v33[1] + 5) = 0;
        LOBYTE(v33[1]) = v18;
        v34 = *(_OWORD *)(a1 + 32);
        dwFlagsb = *(_QWORD *)(a1 + 64);
        v19 = *(_DWORD *)(a1 + 56);
        HIBYTE(v33[1]) = 0;
        return(unsigned int)PiDmGetCmObjectListFromCache(
                               1i64,
                               (__int64)PiPnpRtlEnumeratorFilterCallback,
                               (__int64)v33,
                               v17,
                               v19,
                               dwFlagsb);
      }
      v4 = *(WCHAR **)(a1 + 16);
      if( v4 )
      {
        v5 = (v1 & 0x100) != 0;
        *(_DWORD *)((char *)&v33[1] + 1) = 0;
        v6 = v33[1];
        if( v5 )
          v6 = 1;
        *(_WORD *)((char *)&v33[1] + 5) = 0;
        LOBYTE(v33[1]) = v6;
        v34 = *(_OWORD *)(a1 + 32);
        v31 = *(UINT64 **)(a1 + 64);
        LODWORD(dwFlags) = *(_DWORD *)(a1 + 56);
        v7 = *(_WORD **)(a1 + 48);
        HIBYTE(v33[1]) = 0;
        return(unsigned int)PiDmGetCmObjectConstraintListFromCache(
                               5i64,
                               v4,
                               (INT64)PiPnpRtlEnumeratorFilterCallback,
                               (INT64)v33,
                               v7,
                               dwFlags,
                               v31);
      }
      return(unsigned int)-1073741811;
    }
    v11 = *(WCHAR **)(a1 + 16);
    if( !v11 )
      return(unsigned int)-1073741811;
    inited = RtlInitUnicodeStringEx(&DestinationString, v11);
    if( inited >= 0 )
    {
      v12 = *(_QWORD *)(a1 + 48);
      r8_0 = (__int64)&DestinationString;
      v13 = BYTE1(*(_DWORD *)(a1 + 24)) & 1;
      v37 = 0;
      v36 = v13;
      v42 = *(_QWORD *)(a1 + 32);
      v43 = *(_QWORD *)(a1 + 40);
      dwFlagsa = *(_QWORD *)(a1 + 64);
      pcchRemaining = *(_DWORD *)(a1 + 56);
      v38 = 0;
      v39 = 0;
      v41 = 0i64;
      P = 0i64;
      CmObjectListFromCache = PiDmGetCmObjectListFromCache(
                                1i64,
                                (__int64)PiPnpRtlServiceFilterCallback,
                                (__int64)&r8_0,
                                v12,
                                pcchRemaining,
                                dwFlagsa);
      v15 = P;
      inited = CmObjectListFromCache;
      if( P )
      {
        v16 = 0;
LABEL_15:
        ExFreePoolWithTag(v15, v16);
      }
    }
  }
  return(unsigned int)inited;
}

Referenced by:

PiPnpRtlCmActionCallback