PipInitializeEarlyLaunchDrivers
VOID __stdcall PipInitializeEarlyLaunchDrivers(_LOADER_PARAMETER_BLOCK *LoaderBlock){
UINT64 v1;
const WCHAR *v2;
UNICODE_STRING *v3;
UNICODE_STRING *v4;
UNICODE_STRING *v6;
__int64 v7;
VOID *v8;
int DriverNameFromKeyNode;
INT64 v10;
INT64 v11;
PVOID P[2];
HANDLE Handle;
INT64 v14;
v14 = 0i64;
v3 = (UNICODE_STRING *)((char *)LoaderBlock + 64);
Handle = 0i64;
v4 = (UNICODE_STRING *)*((_QWORD *)LoaderBlock + 8);
*(_OWORD *)P = 0i64;
while( v4 != v3 )
{
v6 = v4;
v4 = *(UNICODE_STRING **)&v4->Length;
if( SLODWORD(v6[3].Buffer) >= 0 )
{
v7 = *(_QWORD *)&v6[3].Length;
if( v7 )
{
v8 = *(VOID **)(v7 + 48);
if( v8 )
SeRegisterElamCertResources(v8, v1, 0, v2);
}
P[1] = 0i64;
Handle = 0i64;
DriverNameFromKeyNode = IopOpenRegistryKeyEx(&Handle, 0i64, v6 + 2, 0x20019ui64);
if( DriverNameFromKeyNode >= 0 )
{
DriverNameFromKeyNode = IopGetDriverNameFromKeyNode(Handle, (UNICODE_STRING *)P);
if( DriverNameFromKeyNode >= 0 )
{
LODWORD(v10) = 0;
DriverNameFromKeyNode = PnpInitializeBootStartDriver(
(UNICODE_STRING *)P,
v6 + 2,
*(_QWORD *)(*(_QWORD *)&v6[3].Length + 56i64),
*(_QWORD *)&v6[3].Length,
(LIST_ENTRY *)LoaderBlock + 1,
0,
v10,
v11,
&v14);
}
}
if( Handle )
ZwClose(Handle);
if( P[1] )
ExFreePoolWithTag(P[1], 0);
if( DriverNameFromKeyNode < 0 )
*(_DWORD *)(*(_QWORD *)&v6[3].Length + 104i64) |= 0x20000u;
}
}
}Referenced by:
IopInitializeBootDrivers