MiLockNonPagedPoolPte
_MMPFN *__fastcall MiLockNonPagedPoolPte(_MMPTE *PoINTerPte, UINT8 *PageIrql){
INT64 v4;
unsigned __int64 v5;
INT64 v6;
volatile signed __int64 *v7;
UINT8 v8;
unsigned __int64 v9;
UINT64 v11;
while( 1 )
{
v4 = MI_READ_PTE_LOCK_FREE((INT64)PoINTerPte);
v11 = v4;
v5 = v4;
if( (v4 & 1) == 0 )
KeBugCheckEx(
0x1Au,
0x5307ui64,
(__int64)(((_QWORD)PoINTerPte << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16,
(ULONG_PTR)PoINTerPte,
0i64);
v6 = v4;
MiPteInShadowRange((UINT64)&v11);
v7 = (volatile signed __int64 *)((char *)MmGetPfnDb() + 48 * ((v5 >> 12) & 0xFFFFFFFFFi64));
v8 = MiLockPageInline((INT64)v7);
v9 = v8;
*PageIrql = v8;
if( v6 == MI_READ_PTE_LOCK_FREE((INT64)PoINTerPte) )
break;
_InterlockedAnd64(v7 + 3, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v9);
}
return(_MMPFN *)v7;
}Referenced by:
MiProbeLockFrame
MmProtectPool