MiGetAweNode
_MMPTE *__stdcall MiGetAweNode(UINT64 a1){
_MMPTE *NextPteToTrim;
unsigned __int64 v2;
union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v3;
NextPteToTrim = KeGetCurrentThread()->ApcState.Process->Vm.Instance.VmWorkingSetList[10].NextPteToTrim;
if( !NextPteToTrim )
return 0i64;
v2 = a1 >> 12;
do
{
v3.Long = (unsigned __int64)NextPteToTrim[3].u;
if( v2 > (*(unsigned int *)(v3.Long + 28) | ((unsigned __int64)*(unsigned __int8 *)(v3.Long + 33) << 32)) )
{
NextPteToTrim = (_MMPTE *)NextPteToTrim[1].u.Long;
}
else
{
if( v2 >= (*(unsigned int *)(v3.Long + 24) | ((unsigned __int64)*(unsigned __int8 *)(v3.Long + 32) << 32)) )
break;
NextPteToTrim = (_MMPTE *)NextPteToTrim->u.Long;
}
}
while( NextPteToTrim );
if( NextPteToTrim )
return NextPteToTrim;
else
return 0i64;
}Referenced by:
MiGetAwePageSizeFromVa
MiProtectAweRegion
MiReferenceIncomingPhysicalPages
MiWriteAwePtes
NtMapUserPhysicalPages
NtMapUserPhysicalPagesScatter