PipInitializeEarlyLaunchDrivers
VOID __stdcall PipInitializeEarlyLaunchDrivers(_LOADER_PARAMETER_BLOCK *LoaderBlock){
UINT8 v1;
const WCHAR *v2;
_LIST_ENTRY *p_EarlyLaunchListHead;
_LIST_ENTRY *Flink;
_LIST_ENTRY *v6;
_LIST_ENTRY *v7;
_LIST_ENTRY *v8;
NTSTATUS DriverNameFromKeyNode;
int v10;
_UNICODE_STRING DriverName;
VOID *Handle;
INT64 v13;
v13 = 0i64;
p_EarlyLaunchListHead = &LoaderBlock->EarlyLaunchListHead;
Handle = 0i64;
Flink = LoaderBlock->EarlyLaunchListHead.Flink;
DriverName = 0i64;
while( Flink != p_EarlyLaunchListHead )
{
v6 = Flink;
Flink = Flink->Flink;
if( SLODWORD(v6[3].Blink) >= 0 )
{
v7 = v6[3].Flink;
if( v7 )
{
v8 = v7[3].Flink;
if( v8 )
SeRegisterElamCertResources(v8, v1, 0i64, v2);
}
DriverName.Buffer = 0i64;
Handle = 0i64;
DriverNameFromKeyNode = IopOpenRegistryKeyEx(&Handle, 0i64, (_UNICODE_STRING *)&v6[2], 0x20019ui64);
if( DriverNameFromKeyNode >= 0 )
{
DriverNameFromKeyNode = IopGetDriverNameFromKeyNode(Handle, &DriverName);
if( DriverNameFromKeyNode >= 0 )
DriverNameFromKeyNode = PnpInitializeBootStartDriver(
&DriverName,
(INT64)&v6[2],
(INT64)v6[3].Flink[3].Blink,
(INT64)v6[3].Flink,
&LoaderBlock->LoadOrderListHead,
0,
0,
v10,
(INT64)&v13);
}
if( Handle )
ZwClose((_HANDLE)Handle);
if( DriverName.Buffer )
ExFreePoolWithTag(DriverName.Buffer, 0);
if( DriverNameFromKeyNode < 0 )
LODWORD(v6[3].Flink[6].Blink) |= 0x20000u;
}
}
}Referenced by:
IopInitializeBootDrivers