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;
}