PipInitializeCoreDriversByGroup
VOID __stdcall PipInitializeCoreDriversByGroup(_CORE_DRIVER_GROUP_TYPE GroupType, _LOADER_PARAMETER_BLOCK *LoaderBlock){
int v2;
__int64 v4;
_UNICODE_STRING **v5;
_UNICODE_STRING *v6;
_UNICODE_STRING *v7;
NTSTATUS DriverNameFromKeyNode;
INT64 v9;
_UNICODE_STRING *v10;
int v11;
_UNICODE_STRING DriverName;
VOID *Handle;
INT64 v14;
v14 = 0i64;
v2 = 0;
Handle = 0i64;
DriverName = 0i64;
if( GroupType )
{
if( GroupType == CoreExtensionsDriverGroup )
{
v4 = 96i64;
v2 = 1;
}
else
{
if( GroupType != TpmCoreDriverGroup )
return;
v4 = 112i64;
}
}
else
{
v4 = 80i64;
}
v5 = (_UNICODE_STRING **)((char *)LoaderBlock + v4);
if( (_LOADER_PARAMETER_BLOCK *)((char *)LoaderBlock + v4) )
{
v6 = *v5;
*(&stru_140C452E0 + 141) = GroupType;
while( v6 != (_UNICODE_STRING *)v5 )
{
v7 = v6;
v6 = *(_UNICODE_STRING **)&v6->Length;
if( SLODWORD(v7[3].Buffer) >= 0 )
{
DriverName.Buffer = 0i64;
Handle = 0i64;
DriverNameFromKeyNode = IopOpenRegistryKeyEx(&Handle, 0i64, v7 + 2, 0x20019ui64);
if( DriverNameFromKeyNode >= 0 )
{
DriverNameFromKeyNode = IopGetDriverNameFromKeyNode(Handle, &DriverName);
if( DriverNameFromKeyNode >= 0 )
{
DriverNameFromKeyNode = PnpInitializeBootStartDriver(
&DriverName,
(INT64)&v7[2],
*(_QWORD *)(*(_QWORD *)&v7[3].Length + 56i64),
*(_QWORD *)&v7[3].Length,
&LoaderBlock->LoadOrderListHead,
0,
v2,
v11,
(INT64)&v14);
if( DriverNameFromKeyNode >= 0 )
{
v9 = v14;
if( v14 )
{
PnpLockDeviceActionQueue();
PipApplyFunctionToServiceInstances(v10, (VOID *)(*(_QWORD *)(v9 + 48) + 24i64));
PnpUnlockDeviceActionQueue();
PnpWaitForEmptyDeviceActionQueue();
PnpRequestDeviceAction(0i64, 7, 0, 0i64, 0i64, 0i64, 0i64);
if( PnpWaitForEmptyDeviceEventQueue() < 0
&& *(&stru_140CF2E80 + 920)
&& *(_QWORD *)(*(&stru_140CF2E80 + 920) + 8i64) )
{
HdlspKernelAddLogEntry(0x12ui64, 0i64);
}
}
}
}
}
if( Handle )
ZwClose((_HANDLE)Handle);
if( DriverName.Buffer )
ExFreePoolWithTag(DriverName.Buffer, 0);
if( DriverNameFromKeyNode < 0 )
*(_DWORD *)(*(_QWORD *)&v7[3].Length + 104i64) |= 0x20000u;
}
}
}
}Referenced by:
IopInitializeBootDrivers