PiInitCacheGroupInformation

INT64 __fastcall PiInitCacheGroupInformation(){
  __int16 v0; 
  INT64 result; 
  NTSTATUS RegistryValue; 
  _UNICODE_STRING *v3; 
  PVOID v4; 
  NTSTATUS v5; 
  UNICODE_STRING KeyName; 
  UINT64 UnicodeStringCount; 
  HANDLE Handle; 
  PVOID P; 
  _UNICODE_STRING *UnicodeStringList; 
  P = 0i64;
  *(_DWORD *)(&KeyName.MaximumLength + 1) = 0;
  Handle = 0i64;
  v0 = 0;
  KeyName.Buffer = L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\ServiceGroupOrder";
  LODWORD(UnicodeStringCount) = 0;
  *(_DWORD *)&KeyName.Length = 9044104;
  result = IopOpenRegistryKeyEx(&Handle, 0i64, &KeyName, 0x20019ui64);
  if( (int)result >= 0 )
  {
    RegistryValue = IopGetRegistryValue(Handle, (PWCHAR)L"List", 0i64, (KEY_VALUE_FULL_INFORMATION **)&P);
    ZwClose(Handle);
    v3 = 0i64;
    UnicodeStringList = 0i64;
    if( RegistryValue < 0 )
      return(unsigned int)RegistryValue;
    v4 = P;
    if( *((_DWORD *)P + 1) == 7 && *((_DWORD *)P + 3) )
    {
      v5 = PnpRegMultiSzToUnicodeStrings((_KEY_VALUE_FULL_INFORMATION *)P, &UnicodeStringList, &UnicodeStringCount);
      v3 = UnicodeStringList;
      RegistryValue = v5;
      v0 = UnicodeStringCount;
    }
    else
    {
      RegistryValue = -1073741823;
    }
    ExFreePoolWithTag(v4, 0);
    if( RegistryValue < 0 )
    {
      return(unsigned int)RegistryValue;
    }
    else
    {
      PiInitGroupOrderTable = v3;
      result = 0i64;
      PiInitGroupOrderTableCount = v0;
    }
  }
  return result;
}

Referenced by:

IopInitializePlugPlayServices