MiInitializeBootLoadedDriverPfns
VOID __stdcall MiInitializeBootLoadedDriverPfns(_LOADER_PARAMETER_BLOCK *LoaderBlock){
_LIST_ENTRY *p_LoadOrderListHead;
_LIST_ENTRY *Flink;
UINT64 v3;
_MMPFN *v4;
int v5;
int v6;
char *v7;
__int64 v8;
unsigned __int64 v9;
__int64 v10;
char *v11;
UINT64 v12;
int v13;
UINT64 v14;
__int64 v15;
_LIST_ENTRY *v16;
v14 = 0i64;
p_LoadOrderListHead = &LoaderBlock->LoadOrderListHead;
Flink = LoaderBlock->LoadOrderListHead.Flink;
v16 = &LoaderBlock->LoadOrderListHead;
while( Flink != p_LoadOrderListHead )
{
v9 = (unsigned __int64)Flink[3].Flink;
v7 = (char *)MmGetPteBase() + ((v9 >> 9) & 0x7FFFFFFFF8i64);
if( MI_IS_PHYSICAL_ADDRESS((VOID *)v9) )
{
if( (MiFlags & 0x10000) != 0 )
MiActOnLargeKernelHalPages(
v9,
(__int64(__fastcall *)(unsigned __int64, unsigned __int64))MiValidateKernelHalLargePageRange);
}
else
{
v10 = ((unsigned int)dword_140C4C9F0 >> 12)
+ (unsigned int)(((unsigned __int64)LODWORD(Flink[4].Flink) + 4095) >> 12);
if( (PVOID)v9 != PsHalImageBase && v9 != PsNtosImageBase )
v10 = (unsigned int)(dword_140C4C98C + v10);
v11 = &v7[8 * v10];
v8 = (unsigned int)v10;
v12 = 0i64;
v15 = (unsigned int)v10;
if( v7 < v11 )
{
MiPteInShadowRange((UINT64)&v14);
do
{
LODWORD(v3) = MI_READ_PTE_LOCK_FREE((INT64)v7);
v14 = v3;
v4 = &MmGetPfnDb()[(v3 >> 12) & 0xFFFFFFFFFi64];
LOBYTE(v5) = MiIsPfnFromSlabAllocation((INT64)v4);
if( v5 )
++v12;
if( (v14 & 0x8000000000000000ui64) == 0i64 )
{
v6 = BYTE2(MiFlags) & 1;
v4->OriginalPte.u.Long = v4->OriginalPte.u.Long & 0xFFFFFFFFFFFFFC1Fui64 | ((-(__int64)(v6 != 0) & 0xFFFFFFFFFFFFFFA0ui64)
+ 192);
if( v6 )
{
if( (((unsigned __int64)v4->u4._bf_0 >> 60) & 7) != 3 )
MiMarkPfnVerified(v4, 0i64);
}
}
*((_BYTE *)&v4->u3 + 3) |= 8u;
v7 += 8;
}
while( v7 < v11 );
p_LoadOrderListHead = v16;
if( v12 )
{
MiAcquireNonPagedResources(&Irp, v12);
if( v13 < 0 )
return;
*(&stru_140C4DB30 + 568) += v12;
}
v8 = v15;
}
if( (PVOID)v9 != PsHalImageBase && v9 != PsNtosImageBase )
{
_InterlockedExchangeAdd((_DWORD *)&stru_140C4DB30 + 1144, v10);
*(&stru_140C4DB30 + 568) -= v8;
}
}
Flink = Flink->Flink;
}
MiFlags |= 0x1000u;
}Referenced by:
MiInitializeDriverImages