PipInitializeCoreDriversByGroup
void __fastcall PipInitializeCoreDriversByGroup(int a1, __int64 a2){
int v2;
__int64 v4;
UNICODE_STRING **v5;
UNICODE_STRING *v6;
UNICODE_STRING *v7;
int DriverNameFromKeyNode;
INT64 v9;
UNICODE_STRING *v10;
UINT64 *v11;
HANDLE v12;
INT64 v13;
PVOID P[2];
HANDLE Handle;
INT64 v16;
v16 = 0i64;
v2 = 0;
Handle = 0i64;
*(_OWORD *)P = 0i64;
if( a1 )
{
if( a1 == 1 )
{
v4 = 96i64;
v2 = 1;
}
else
{
if( a1 != 2 )
return;
v4 = 112i64;
}
}
else
{
v4 = 80i64;
}
v5 = (UNICODE_STRING **)(v4 + a2);
if( v4 + a2 )
{
v6 = *v5;
PnpCoreDriverGroupLoadPhase = a1;
while( v6 != (UNICODE_STRING *)v5 )
{
v7 = v6;
v6 = *(UNICODE_STRING **)&v6->Length;
if( SLODWORD(v7[3].Buffer) >= 0 )
{
P[1] = 0i64;
Handle = 0i64;
DriverNameFromKeyNode = IopOpenRegistryKeyEx(&Handle, 0i64, v7 + 2, 0x20019ui64);
if( DriverNameFromKeyNode >= 0 )
{
DriverNameFromKeyNode = IopGetDriverNameFromKeyNode(Handle, (UNICODE_STRING *)P);
if( DriverNameFromKeyNode >= 0 )
{
LODWORD(v12) = v2;
DriverNameFromKeyNode = PnpInitializeBootStartDriver(
(UNICODE_STRING *)P,
v7 + 2,
*(_QWORD *)(*(_QWORD *)&v7[3].Length + 56i64),
*(_QWORD *)&v7[3].Length,
(LIST_ENTRY *)(a2 + 16),
0,
(INT64)v12,
v13,
&v16);
if( DriverNameFromKeyNode >= 0 )
{
v9 = v16;
if( v16 )
{
PnpLockDeviceActionQueue();
PipApplyFunctionToServiceInstances(v10, (PVOID)(*(_QWORD *)(v9 + 48) + 24i64));
PnpUnlockDeviceActionQueue();
PnpWaitForEmptyDeviceActionQueue(v11);
HIDWORD(v12) = 0;
PnpRequestDeviceAction(0i64, ReenumerateBootDevices, 0, 0i64, 0i64, 0i64);
if( (int)PnpWaitForEmptyDeviceEventQueue() < 0 && HeadlessGlobals && HeadlessGlobals[1] )
HdlspKernelAddLogEntry(0x12ui64, 0i64);
}
}
}
}
if( Handle )
ZwClose(Handle);
if( P[1] )
ExFreePoolWithTag(P[1], 0);
if( DriverNameFromKeyNode < 0 )
*(_DWORD *)(*(_QWORD *)&v7[3].Length + 104i64) |= 0x20000u;
}
}
}
}Referenced by:
IopInitializeBootDrivers