MiLockNonPagedPoolPte
_MMPFN *__stdcall MiLockNonPagedPoolPte(ULONG_PTR PointerPte, UINT8 *PageIrql){
INT64 v3;
UINT64 v4;
UINT64 v5;
UINT64 v6;
_MMPFN *v7;
UINT8 v8;
unsigned __int64 v9;
__int64 v10;
UINT64 v12;
v3 = *(_QWORD *)&PointerPte;
while( 1 )
{
LODWORD(v4) = MI_READ_PTE_LOCK_FREE(v3);
v12 = v4;
v5 = v4;
if( (v4 & 1) == 0 )
KeBugCheckEx(0x1Au, (PVOID)0x5307, (PVOID)(((v3 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16), (PVOID)v3, 0i64);
v6 = v4;
MiPteInShadowRange((UINT64)&v12);
v7 = &MmGetPfnDb()[(v5 >> 12) & 0xFFFFFFFFFi64];
v8 = MiLockPageInline(v7);
v9 = v8;
*PageIrql = v8;
LODWORD(v10) = MI_READ_PTE_LOCK_FREE(v3);
if( v6 == v10 )
break;
_InterlockedAnd64(&v7->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v9);
}
return v7;
}Referenced by:
MiProbeLockFrame
MmProtectPool