MiInitializeBootLoadedDriverPfns
VOID __stdcall MiInitializeBootLoadedDriverPfns(_LOADER_PARAMETER_BLOCK *LoaderBlock){
char *v1;
char *v2;
char *v3;
int v4;
char *v5;
__int64 v6;
char *v7;
__int64 v8;
char *v9;
UINT64 v10;
UINT64 v11;
__int64 v12;
char *v13;
v11 = 0i64;
v1 = (char *)LoaderBlock + 16;
v2 = (char *)*((_QWORD *)LoaderBlock + 2);
v13 = (char *)LoaderBlock + 16;
while( v2 != v1 )
{
v7 = (char *)*((_QWORD *)v2 + 6);
v5 = (char *)MmGetPteBase() + (((unsigned __int64)v7 >> 9) & 0x7FFFFFFFF8i64);
if( (unsigned int)MI_IS_PHYSICAL_ADDRESS(v7) )
{
if( (MiFlags & 0x10000) != 0 )
MiActOnLargeKernelHalPages(v7, (__int64(__fastcall *)(char *, char *))MiValidateKernelHalLargePageRange);
}
else
{
v8 = ((unsigned int)dword_140C4C9F0 >> 12)
+ (unsigned int)(((unsigned __int64)*((unsigned int *)v2 + 16) + 4095) >> 12);
if( v7 != PsHalImageBase && v7 != (char *)PsNtosImageBase )
v8 = (unsigned int)(dword_140C4C98C + v8);
v9 = &v5[8 * v8];
v6 = (unsigned int)v8;
v10 = 0i64;
v12 = (unsigned int)v8;
if( v5 < v9 )
{
MiPteInShadowRange((UINT64)&v11);
do
{
v11 = MI_READ_PTE_LOCK_FREE((INT64)v5);
v3 = (char *)MmGetPfnDb() + 48 * ((v11 >> 12) & 0xFFFFFFFFFi64);
if( MiIsPfnFromSlabAllocation((INT64)v3) )
++v10;
if( (v11 & 0x8000000000000000ui64) == 0i64 )
{
v4 = BYTE2(MiFlags) & 1;
*((_QWORD *)v3 + 2) = *((_QWORD *)v3 + 2) & 0xFFFFFFFFFFFFFC1Fui64 | ((-(__int64)(v4 != 0) & 0xFFFFFFFFFFFFFFA0ui64)
+ 192);
if( v4 )
{
if( ((*((_QWORD *)v3 + 5) >> 60) & 7) != 3 )
MiMarkPfnVerified((UINT64)v3, 0);
}
}
v3[35] |= 8u;
v5 += 8;
}
while( v5 < v9 );
v1 = v13;
if( v10 )
{
if( (MiAcquireNonPagedResources((_MI_PARTITION *)&MiSystemPartition, v10) & 0x80000000) != 0i64 )
return;
qword_140C4ECF0 += v10;
}
v6 = v12;
}
if( v7 != PsHalImageBase && v7 != (char *)PsNtosImageBase )
{
_InterlockedExchangeAdd(&dword_140C4ED10, v8);
qword_140C4ECF0 -= v6;
}
}
v2 = *(char **)v2;
}
MiFlags |= 0x1000u;
}Referenced by:
MiInitializeDriverImages