MiDecayPfnFullyInitialized

VOID __stdcall MiDecayPfnFullyInitialized(_MMPFN *DecayPfn){
  int v2; 
  signed __int64 v3; 
  union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v4; 
  __int64 v5; 
  char v6; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  memset(&LockHandle, 0, sizeof(LockHandle));
  v2 = 0;
  v3 = DecayPfn - MmGetPfnDb();
  KeAcquireInStackQueuedSpinLock(
    (PKSPIN_LOCK)(*(_QWORD *)(*(&stru_140C4DB30 + 267) + 8 * (((unsigned __int64)DecayPfn->u4._bf_0 >> 39) & 0x3FF))
                + 2664i64),
    &LockHandle);
  v4.Long = (unsigned __int64)DecayPfn->OriginalPte.u;
  if( *(&stru_140C4DB30 + 42) && (v4.Long & 0x10) == 0 )
    v4.Long &= ~*(&stru_140C4DB30 + 42);
  v5 = (v4.Long >> 12) & 0xFFFFFFFFFi64;
  v6 = *((_BYTE *)&DecayPfn->u3 + 3);
  if( (v6 & 8) != 0 )
  {
    if( v5 != v3 )
      goto LABEL_6;
    MiUnlinkPageFromList(DecayPfn, 1ui64);
    MiRemoveDecayClusterTimer(DecayPfn);
    v6 = *((_BYTE *)&DecayPfn->u3 + 3);
  }
  v2 = 1;
LABEL_6:
  *((_BYTE *)&DecayPfn->u3 + 3) = v6 & 0xF7;
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
  if( v2 == 1 )
    RtlpInterlockedPushEntrySList((PSLIST_HEADER)&stru_140C4DB30 + 188, (PSLIST_ENTRY)DecayPfn);
}

Referenced by:

MiCopyDataPageToImagePage
MiDeleteVaTail
MiFinishHardFault
MiWalkEntireImage