MiIsPageTableLocked
UINT64 __fastcall MiIsPageTableLocked(INT64 a1, UINT64 a2){
char v2;
char v4;
INT64 v5;
INT64 v6;
__int64 v8;
__int64 *v9;
bool v10;
CHAR *PageTableLockBuffer;
int a3;
v2 = *(_BYTE *)(a1 + 184);
a3 = 0;
v4 = v2 & 7;
if( (_MMPTE *)a2 == MmGetPxeSelfRef() )
{
if( v4 )
{
if( v4 == 7 )
{
v9 = qword_140C4E238;
}
else
{
v9 = &qword_140C4E230;
if( v4 != 5 )
v9 = qword_140C4E248;
}
}
else
{
v9 = (__int64 *)(a1 + 176);
}
v10 = *v9 == 0;
}
else
{
if( v4
|| a2 < (unsigned __int64)MmGetPml4eBase()
|| a2 > (unsigned __int64)MmGetPml4eLimit()
|| (v8 = *(_QWORD *)(*(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 1680i64) + 608i64)) == 0 )
{
if( MiShouldLockPteDirectly(a1, a2) )
return((unsigned __int64)MI_READ_PTE_LOCK_FREE(v5) >> 60) & 1;
PageTableLockBuffer = MiGetPageTableLockBuffer(v6, v5, &a3);
return((*(_DWORD *)PageTableLockBuffer >> a3) & 1) != 0;
}
v10 = *(_DWORD *)(v8 + 4 * ((a2 >> 3) & 0x1FF)) == 0;
}
return !v10;
}Referenced by:
MiAgePte
MiResetAccessBitPte
MiTrimPte
MiWalkVaCheckCommon