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