PiPnpRtlGetFilteredDeviceInterfaceList

NTSTATUS __stdcall PiPnpRtlGetFilteredDeviceInterfaceList(_CM_ACTION_INFORMATION *CmObjectActionInfo){
  bool v2; 
  WCHAR *v3; 
  char v4; 
  __int64 v5; 
  const WCHAR *v6; 
  HPNPCTX *v7; 
  NTSTATUS result; 
  WCHAR *v9; 
  const WCHAR *v10; 
  VOID *v11; 
  VOID *v12; 
  INT64 MatchCallbackRoutine[2]; 
  __int128 v14; 
  __int64 v15; 
  _UNICODE_STRING DestinationString; 
  _GUID Guid; 

  v2 = (CmObjectActionInfo[8] & 1) == 0;
  v14 = 0i64;
  v3 = (WCHAR *)*((_QWORD *)CmObjectActionInfo + 2);
  v4 = _mm_cvtsi128_si32((__m128i)0i64);
  v5 = *((_QWORD *)CmObjectActionInfo + 5);
  if( !v2 )
    v4 = 1;
  LOBYTE(v14) = v4;
  v6 = (const WCHAR *)*((_QWORD *)CmObjectActionInfo + 3);
  *((_QWORD *)&v14 + 1) = v5;
  v15 = *((_QWORD *)CmObjectActionInfo + 6);
  Guid = 0i64;
  *(_OWORD *)MatchCallbackRoutine = 0i64;
  DestinationString = 0i64;
  if( !v6 )
  {
    v7 = (HPNPCTX *)*((_QWORD *)CmObjectActionInfo + 7);
    if( v3 )
    {
      LODWORD(v10) = CmObjectActionInfo[16];
      return PiDmGetCmObjectConstraintListFromCache(
               PiDmListInterfacesInInterfaceClass,
               v3,
               (UINT8)PiPnpRtlInterfaceFilterCallback,
               MatchCallbackRoutine,
               v7,
               v10,
               (_CM_OBJECT_TYPE)*((_QWORD *)CmObjectActionInfo + 9),
               v12,
               (VOID *)MatchCallbackRoutine[0],
               (WCHAR *)MatchCallbackRoutine[1],
               v14,
               *((UINT64 **)&v14 + 1));
    }
    else
    {
      LODWORD(v9) = CmObjectActionInfo[16];
      return PiDmGetCmObjectListFromCache(
               CM_OBJECT_TYPE_DEVICE_INTERFACE,
               (UINT8)PiPnpRtlInterfaceFilterCallback,
               MatchCallbackRoutine,
               v7,
               v9,
               (_CM_OBJECT_TYPE)*((_QWORD *)CmObjectActionInfo + 9),
               v11,
               v12,
               (WCHAR *)MatchCallbackRoutine[0],
               MatchCallbackRoutine[1],
               (UINT64 *)v14);
    }
  }
  if( !v3 )
  {
LABEL_11:
    LODWORD(v10) = CmObjectActionInfo[16];
    return PiDmGetCmObjectConstraintListFromCache(
             PiDmListInterfacesInDevice,
             v6,
             (UINT8)PiPnpRtlInterfaceFilterCallback,
             MatchCallbackRoutine,
             *((HPNPCTX **)CmObjectActionInfo + 7),
             v10,
             (_CM_OBJECT_TYPE)*((_QWORD *)CmObjectActionInfo + 9),
             v12,
             (VOID *)MatchCallbackRoutine[0],
             (WCHAR *)MatchCallbackRoutine[1],
             v14,
             *((UINT64 **)&v14 + 1));
  }
  result = RtlInitUnicodeStringEx(&DestinationString, v3);
  if( result >= 0 )
  {
    result = RtlGUIDFromString(&DestinationString, &Guid);
    if( result >= 0 )
    {
      v6 = (const WCHAR *)*((_QWORD *)CmObjectActionInfo + 3);
      MatchCallbackRoutine[0] = (INT64)&Guid;
      goto LABEL_11;
    }
  }
  return result;
}

Referenced by:

PiPnpRtlCmActionCallback