PpInitGetGroupOrderIndex

UINT16 __stdcall PpInitGetGroupOrderIndex(PVOID ServiceHandle){
  _WORD *v1; 
  UINT64 v2; 
  WCHAR *v3; 
  UINT16 v4; 
  unsigned __int16 v5; 
  wchar_t *v6; 
  UNICODE_STRING String1; 
  PVOID P; 
  *(_DWORD *)(&String1.MaximumLength + 1) = 0;
  P = 0i64;
  if( !PiInitGroupOrderTable )
    return -1;
  if( !ServiceHandle )
    return PiInitGroupOrderTableCount + 1;
  if( IopGetRegistryValue(ServiceHandle, (PWCHAR)L"Group", 0i64, (KEY_VALUE_FULL_INFORMATION **)&P) < 0 )
    return PiInitGroupOrderTableCount;
  v1 = P;
  if( *((_DWORD *)P + 1) != 1 || (v2 = *((unsigned int *)P + 3), !(_DWORD)v2) )
  {
    ExFreePoolWithTag(P, 0);
    return PiInitGroupOrderTableCount;
  }
  v3 = (WCHAR *)((char *)P + *((unsigned int *)P + 2));
  LODWORD(P) = 0;
  PnpRegSzToString(v3, v2, (UINT64 *)&P);
  v4 = 0;
  v5 = PiInitGroupOrderTableCount;
  String1.MaximumLength = v1[6];
  v6 = (_WORD *)((char *)v1 + *((unsigned int *)v1 + 2));
  String1.Length = (unsigned __int16)P;
  for( String1.Buffer = v6; v4 < v5; ++v4 )
  {
    if( RtlEqualUnicodeString(&String1, (UNICODE_STRING *)PiInitGroupOrderTable + v4, 1u) )
      break;
  }
  ExFreePoolWithTag(v1, 0);
  return v4;
}

Referenced by:

IopInitializeBootDrivers
PipCallDriverAddDeviceQueryRoutine