MiCountWslesInPageTable
UINT64 __fastcall MiCountWslesInPageTable(INT64 a1, UINT64 a2, _OWORD *a3){
_MMPTE *PteBase;
_MMPTE *Pml4eBase;
_MMPTE *PxeUserLimit;
UINT64 v6;
UINT64 result;
__int64 v8;
PteBase = MmGetPteBase();
Pml4eBase = MmGetPml4eBase();
PxeUserLimit = MmGetPxeUserLimit();
*a3 = 0i64;
v6 = ((unsigned __int64)PteBase + ((a2 >> 9) & 0x7FFFFFFFF8i64)) & 0xFFFFFFFFFFFFF000ui64;
a3[1] = 0i64;
do
{
result = (UINT64)Pml4eBase;
if( v6 >= (unsigned __int64)Pml4eBase )
result = (UINT64)PxeUserLimit;
if( (*(_QWORD *)v6 & 1) != 0 )
{
v8 = HIBYTE(*(_QWORD *)((char *)PteBase
+ ((((__int64)((v6 << 25) - ((_QWORD)PteBase << 25)) >> 16) & 0xFFFFFFFFF000ui64) >> 9))) & 0xF;
result = (unsigned int)(v8 - 8);
if( (unsigned __int8)(v8 - 8) > 2u )
{
result = (unsigned __int8)v8;
++*((_DWORD *)a3 + (unsigned __int8)v8);
}
}
v6 += 8i64;
}
while( (v6 & 0xFFF) != 0 );
return result;
}Referenced by:
MiAddWorkingSetEntries
MiDeleteVa
MiRebuildPageTableLeafAges
MiSetVaAgeList
MiTerminateWsle
MiTerminateWsleCluster