MiPrefetchDriverPages
VOID __stdcall MiPrefetchDriverPages(_MMPTE *FirstPte, _MMPTE *LastPte){
unsigned __int64 v2;
__int64 DemandZeroPte;
__int64 *v4;
unsigned __int64 v5;
__int64 v6;
unsigned __int64 v7;
_MMPTE *PteBase;
_MMPTE *Pml4eBase;
_MMPTE *PxeUserLimit;
__int64 PteShadow;
__int64 v12;
INT64 v13;
unsigned __int64 v14;
v2 = 0i64;
DemandZeroPte = MiMakeDemandZeroPte(4);
v14 = 0i64;
v6 = 0i64;
v13 = 0i64;
if( (unsigned __int64)v4 <= v7 )
{
PteBase = MmGetPteBase();
Pml4eBase = MmGetPml4eBase();
PxeUserLimit = MmGetPxeUserLimit();
do
{
PteShadow = *v4;
if( v4 >= (__int64 *)Pml4eBase && v4 <= (__int64 *)PxeUserLimit )
PteShadow = MiReadPteShadow((__int64)v4, *v4);
if( (PteShadow & 1) == 0 && ((PteShadow & 0x400) != 0 || (PteShadow & 0x800) == 0 && PteShadow != DemandZeroPte) )
{
v12 = ((_QWORD)v4 << 25) - ((_QWORD)PteBase << 25);
if( !v2 )
{
v6 = v12 >> 16;
v13 = v12 >> 16;
}
v2 = ((v12 + 0x10000000) >> 16) - v6;
v14 = v2;
}
++v4;
}
while( (unsigned __int64)v4 <= v5 );
if( v2 > 0x1000 )
MiPrefetchVirtualMemory(1ui64, (INT64)&v13, (CHAR *)1, 45i64);
}
}Referenced by:
MiLockCode