MiMarkPteDirty
VOID __stdcall MiMarkPteDirty(_MMPTE *PointerPte){
__int16 v2;
VOID *v3;
_MMSUPPORT_INSTANCE *AnyMultiplexedVm;
CHAR *v5;
__int64 v6;
UINT64 v7;
UINT64 WsIrql;
LOBYTE(WsIrql) = 0;
v2 = MI_READ_PTE_LOCK_FREE((INT64)PointerPte);
if( (v2 & 0x42) == 0 && (v2 & 0x800) != 0 )
{
AnyMultiplexedVm = MiGetAnyMultiplexedVm(MiWorkingSetTypeSystemCache, v3);
v5 = MiLockWorkingSetOptimal((INT64)AnyMultiplexedVm, (UINT64)PointerPte, &WsIrql);
LODWORD(v6) = MI_READ_PTE_LOCK_FREE((INT64)PointerPte);
if( (v6 & 1) != 0 && (v6 & 0x42) == 0 && (v6 & 0x800) != 0 )
MiWriteValidPteNewProtection((INT64 *)PointerPte, v6 | 0x62);
MiUnlockPageTableInternal((INT64)AnyMultiplexedVm, (UINT64)v5);
LOBYTE(v7) = WsIrql;
MiUnlockWorkingSetShared(AnyMultiplexedVm, v7);
}
}Referenced by:
MmCheckCachedPageStates