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