PiDmGetObjectList

NTSTATUS __fastcall PiDmGetObjectList(
        PNP_OBJECT_TYPE ObjectType,
        INT64 a2,
        INT64 *MatchCallbackRoutine,
        PI_DM_OBJECT *a4,
        VOID *a5,
        UINT8 *a6,
        VOID *MatchCallbackContext,
        WCHAR *Buffer,
        UINT64 BufferLength,
        UINT64 *RequiredLength){
  int v11; 
  unsigned int v12; 
  __int64 EnumCallback[3]; 
  __int64 v15; 

  EnumCallback[0] = a2;
  EnumCallback[1] = (__int64)MatchCallbackRoutine;
  EnumCallback[2] = (__int64)a4;
  *(_DWORD *)a6 = 0;
  v15 = (unsigned int)a5;
  if( (_DWORD)a5 )
    *(_WORD *)a4 = 0;
  v11 = PiDmEnumObjectsWithCallback(
          ObjectType,
          (INT64)PiDmGetObjectListCallback,
          EnumCallback,
          a4,
          (VOID *)EnumCallback[0],
          (UINT8 *)EnumCallback[1],
          (VOID *)EnumCallback[2]);
  if( v11 >= 0 )
  {
    v12 = HIDWORD(v15);
    *(_DWORD *)a6 = HIDWORD(v15);
    if( v12 )
    {
      *(_DWORD *)a6 = v12 + 1;
      if( a4 && (unsigned int)a5 >= v12 + 1 )
        *((_WORD *)a4 + v12) = 0;
      else
        return -1073741789;
    }
  }
  return v11;
}

Referenced by:

PiDmGetCmObjectListFromCache
PiPnpRtlObjectActionCallback