MiSwapHardFaultPage
VOID __fastcall MiSwapHardFaultPage(_MMPTE *PoINTerPte, _MMPFN *Pfn1, _MMPFN *NewPfn){
INT64 v6;
_MMPFN *PfnDb;
__int64 v8;
UINT8 *v9;
v6 = MI_READ_PTE_LOCK_FREE((INT64)PoINTerPte);
PfnDb = MmGetPfnDb();
*(_QWORD *)PoINTerPte = MiUpdateTransitionPteFrame(v6, (NewPfn - PfnDb) / 48);
MiLockNestedPageAtDpcInline((INT64)NewPfn);
MiCopyPfnEntryEx((INT64)NewPfn, (INT64)Pfn1);
if( ((*((_QWORD *)Pfn1 + 5) >> 60) & 7) == 3 )
*((_QWORD *)NewPfn + 5) = *((_QWORD *)NewPfn + 5) & 0x8FFFFFFFFFFFFFFFui64 | 0x3000000000000000i64;
*((_QWORD *)NewPfn + 3) &= 0xC000000000000000ui64;
*((_QWORD *)Pfn1 + 3) |= 0x4000000000000000ui64;
v8 = *((_QWORD *)Pfn1 + 2);
if( (v8 & 4) != 0 )
{
v8 &= ~4ui64;
*((_QWORD *)Pfn1 + 2) = v8;
}
if( (v8 & 2) != 0 )
*((_QWORD *)Pfn1 + 2) = v8 & 0xFFFFFFFFFFFFFFFDui64;
if( (unsigned int)MiRemoveLockedPageCharge((INT64)Pfn1) )
MiPfnReferenceCountIsZero(Pfn1, (Pfn1 - PfnDb) / 48, v9);
else
*((_WORD *)NewPfn + 16) = 1;
_InterlockedAnd64((volatile signed __int64 *)Pfn1 + 3, 0x7FFFFFFFFFFFFFFFui64);
}Referenced by:
MiFinishHardFault
MiIdealClusterPage