MiLockProtoPage
MMPTE *__stdcall MiLockProtoPage(MMPTE *ProtoPte, MMPTE *LastProtoPte, UINT8 WsIrql){
__int64 v5;
UINT64 v6;
char *v7;
unsigned __int64 v8;
UINT64 v10;
v5 = *((_QWORD *)KeGetCurrentThread() + 23);
if( LastProtoPte )
{
v10 = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + (((unsigned __int64)LastProtoPte >> 9) & 0x7FFFFFFFF8i64));
v6 = v10;
MiPteInShadowRange((UINT64)&v10);
v7 = (char *)MmGetPfnDb() + 48 * ((v6 >> 12) & 0xFFFFFFFFFi64);
v8 = (unsigned __int8)MiLockPageInline((INT64)v7);
MiRemoveLockedPageChargeAndDecRef((_MMPFN *)v7);
_InterlockedAnd64((volatile signed __int64 *)v7 + 3, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v8);
if( !ProtoPte )
return 0i64;
}
MiUnlockWorkingSetShared(v5 + 1664, WsIrql);
MiMakeProtoAddressValid(ProtoPte);
MiLockWorkingSetShared(v5 + 1664);
return ProtoPte;
}Referenced by:
MiGetWorkingSetInfoList