PipGetDriverTagPriority
UINT16 __fastcall PipGetDriverTagPriority(VOID *ServiceHandle){
UINT16 v2;
_WORD *v3;
UINT64 v4;
__int64 v5;
int v6;
NTSTATUS RegistryValue;
NTSTATUS v9;
unsigned __int64 v10;
unsigned int *v11;
unsigned int v12;
_DWORD *v13;
PVOID v14;
UNICODE_STRING KeyName;
PVOID P;
HANDLE Handle;
PVOID v18;
P = 0i64;
v18 = 0i64;
v14 = 0i64;
*(_DWORD *)(&KeyName.MaximumLength + 1) = 0;
Handle = 0i64;
KeyName.Buffer = L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\GroupOrderList";
v2 = -1;
*(_DWORD *)&KeyName.Length = 8650882;
if( (int)IopOpenRegistryKeyEx(&Handle, 0i64, &KeyName, 0x20019ui64) < 0 )
return v2;
if( IopGetRegistryValue(ServiceHandle, (PWCHAR)L"Group", 0i64, (KEY_VALUE_FULL_INFORMATION **)&P) < 0 )
{
LABEL_8:
ZwClose(Handle);
return v2;
}
v3 = P;
if( *((_DWORD *)P + 1) == 1 )
{
v4 = *((unsigned int *)P + 3);
if( (_DWORD)v4 )
{
v5 = *((unsigned int *)P + 2);
LODWORD(P) = 0;
PnpRegSzToString((_WORD *)((char *)v3 + v5), v4, (UINT64 *)&P);
KeyName.Length = (unsigned __int16)P;
KeyName.MaximumLength = v3[6];
KeyName.Buffer = (_WORD *)((char *)v3 + *((unsigned int *)v3 + 2));
}
}
v6 = 0;
RegistryValue = IopGetRegistryValue(ServiceHandle, (PWCHAR)L"Tag", 0x50ui64, (KEY_VALUE_FULL_INFORMATION **)&v18);
if( RegistryValue < 0
|| (*((_DWORD *)v18 + 1) != 4 || *((_DWORD *)v18 + 3) != 4 ? (RegistryValue = -1073741823) : (v6 = *(_DWORD *)((char *)v18 + *((unsigned int *)v18 + 2))),
ExFreePoolWithTag(v18, 0),
RegistryValue < 0) )
{
ExFreePoolWithTag(v3, 0);
goto LABEL_8;
}
v9 = IopGetRegistryValue(Handle, KeyName.Buffer, 0x50ui64, (KEY_VALUE_FULL_INFORMATION **)&v14);
ExFreePoolWithTag(v3, 0);
ZwClose(Handle);
if( v9 >= 0 )
{
if( *((_DWORD *)v14 + 1) == 3 )
{
v10 = *((unsigned int *)v14 + 3);
if( (unsigned int)v10 >= 4 )
{
v11 = (unsigned int *)((char *)v14 + *((unsigned int *)v14 + 2));
v12 = *v11;
if( 4 * (unsigned __int64)(*v11 + 1) <= v10 )
{
v13 = v11 + 1;
v2 = 1;
if( v12 )
{
do
{
if( v6 == *v13 )
break;
++v2;
++v13;
}
while( v2 <= v12 );
}
}
}
}
ExFreePoolWithTag(v14, 0);
}
return v2;
}Referenced by:
IopInitializeBootDrivers