MiEmptyDecayClusterTimers

VOID __stdcall MiEmptyDecayClusterTimers(_MI_PARTITION *Partition){
  unsigned __int64 UnbiasedInterruptTime; 
  char v3; 
  __int64 v4; 
  __int64 v5; 
  _MMPFN *PfnDb; 
  unsigned __int8 CurrentIrql; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  _MMPFN *v10; 
  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;} v11; 
  __int64 v12; 
  _MMPFN *v13; 
  unsigned int v14; 
  UINT8 *v15; 
  _KLOCK_QUEUE_HANDLE LockQueue; 
  int v17; 

  memset(&LockQueue, 0, sizeof(LockQueue));
  UnbiasedInterruptTime = KiQueryUnbiasedInterruptTime(1u);
  if( UnbiasedInterruptTime - Partition->PageLists.LastDecayHandUpdateTime >= 0x989680 )
  {
    v3 = Partition->PageLists.DecayHand + 1;
    Partition->PageLists.LastDecayHandUpdateTime = UnbiasedInterruptTime;
    v4 = v3 & 3;
    v17 = v4;
    v5 = (unsigned int)v4;
    if( Partition->PageLists.DecayClusterTimerHeads[v4].u1.Long >> 33 != 0x7FFFFFFF )
    {
      PfnDb = MmGetPfnDb();
      while( 1 )
      {
        CurrentIrql = KeGetCurrentIrql();
        __writecr8(2ui64);
        LockQueue.LockQueue.Next = 0i64;
        LockQueue.LockQueue.Lock = &Partition->PageLists.StandbyPageListByPriority[5].Lock;
        KxAcquireQueuedSpinLock(&LockQueue.LockQueue, &Partition->PageLists.StandbyPageListByPriority[5].Lock);
        v8 = Partition->PageLists.DecayClusterTimerHeads[v5].u1.Long >> 33;
        if( v8 == 0x7FFFFFFF )
          break;
        v9 = v8 + *(&stru_140C4DB30 + 374);
        v10 = &PfnDb[v8 + *(&stru_140C4DB30 + 374)];
        v11.Long = (unsigned __int64)v10->OriginalPte.u;
        if( *(&stru_140C4DB30 + 42) && (v11.Long & 0x10) == 0 )
          v11.Long &= ~*(&stru_140C4DB30 + 42);
        v12 = (v11.Long >> 12) & 0xFFFFFFFFFi64;
        if( v12 == v9 )
        {
          MiUnlinkPageFromList(v10, 1ui64);
          *((_BYTE *)&v10->u3 + 3) &= ~8u;
          MiRemoveDecayClusterTimer(v10);
          KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockQueue);
        }
        else
        {
          v13 = &PfnDb[v12];
          if( _interlockedbittestandset64((volatile signed __int32 *)&v13->u2, 0x3Fui64) )
          {
            KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockQueue);
          }
          else
          {
            v14 = *((_BYTE *)&v13->u3 + 3) & 7;
            KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockQueue);
            MiRelinkStandbyPage((ULONG_PTR)v13, v14, v15);
            _InterlockedAnd64(&v13->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
          }
        }
        __writecr8(CurrentIrql);
      }
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockQueue);
      LODWORD(v4) = v17;
      __writecr8(CurrentIrql);
    }
    Partition->PageLists.DecayHand = v4;
  }
}

Referenced by:

MiWorkingSetManager