MiWorkingSetInfoCheckPageTable
NTSTATUS __stdcall MiWorkingSetInfoCheckPageTable(INT64 a1, UINT64 a2, INT64 a3, CHAR a4, UINT8 WsIrql){
NTSTATUS v9;
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;} v10;
__int64 v11;
unsigned __int64 v12;
_MMPTE *PteBase;
UINT64 Flags;
_MMPTE PointerPte;
v9 = 0;
LODWORD(v10.Long) = MI_READ_PTE_LOCK_FREE(a2);
PointerPte.u.Long = v10.Long;
v11 = v10.Long & 0x800;
if( (v10.Long & 0x800) != 0 || MiGetPagingFileOffset(&PointerPte) )
{
if( (a4 & 1) != 0 )
{
if( v11 )
v12 = *(_QWORD *)(a3 + 8) & 0xFFFFFFFFFF1FFFFFui64 | 0x600000;
else
v12 = *(_QWORD *)(a3 + 8) & 0xFFFFFFFFFF1FFFFFui64 | 0xA00000;
*(_QWORD *)(a3 + 8) = v12;
}
else if( (a4 & 2) != 0 )
{
PteBase = MmGetPteBase();
MiUnlockPageTableInternal(a1, (UINT64)PteBase + ((a2 >> 9) & 0x7FFFFFFFF8i64));
LODWORD(Flags) = 0;
MiMakeSystemAddressValid(
(VOID *)((__int64)((a2 << 25) - ((_QWORD)PteBase << 25)) >> 16),
0i64,
0i64,
WsIrql,
Flags);
MiUnlockPageTableInternal(a1, a2);
return 1;
}
}
return v9;
}Referenced by:
MiGetWorkingSetInfoList