MiEmptyDecayClusterTimers
VOID __stdcall MiEmptyDecayClusterTimers(_MI_PARTITION *Partition){
UINT64 UnbiasedInterruptTime;
WORK_QUEUE_TYPE v3;
void *v4;
char v5;
__int64 v6;
__int64 v7;
_MMPFN *PfnDb;
unsigned __int8 CurrentIrql;
__int64 v10;
ULONG_PTR v11;
INT64 v12;
unsigned __int64 v13;
__int64 v14;
char *v15;
unsigned int v16;
UINT16 v17;
_BYTE LockHandle[72];
int v19;
memset(LockHandle, 0, 24);
UnbiasedInterruptTime = KiQueryUnbiasedInterruptTime(1u);
if( UnbiasedInterruptTime - *((_QWORD *)Partition + 604) >= 0x989680 )
{
v5 = *((_DWORD *)Partition + 1206) + 1;
*((_QWORD *)Partition + 604) = UnbiasedInterruptTime;
v6 = v5 & 3;
v19 = v6;
v7 = (unsigned int)v6;
if( *((_QWORD *)Partition + v6 + 599) >> 33 != 0x7FFFFFFFi64 )
{
PfnDb = MmGetPfnDb();
while( 1 )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
*(_QWORD *)LockHandle = 0i64;
*(_QWORD *)&LockHandle[8] = (char *)Partition + 2664;
KxAcquireQueuedSpinLock((PIO_WORKITEM)LockHandle, (PIO_WORKITEM_ROUTINE)((char *)Partition + 2664), v3, v4);
v10 = *((_QWORD *)Partition + v7 + 599) >> 33;
if( v10 == 0x7FFFFFFF )
break;
v11 = v10 + BasePage;
v12 = (INT64)PfnDb + 48 * v10 + 48 * BasePage;
v13 = *(_QWORD *)(v12 + 16);
if( qword_140C4DC80 && (v13 & 0x10) == 0 )
v13 &= ~qword_140C4DC80;
v14 = (v13 >> 12) & 0xFFFFFFFFFi64;
if( v14 == v11 )
{
MiUnlinkPageFromList((_MMPFN *)v12, 1ui64);
*(_BYTE *)(v12 + 35) &= ~8u;
MiRemoveDecayClusterTimer(v12);
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)LockHandle);
}
else
{
v15 = (char *)PfnDb + 48 * v14;
if( _interlockedbittestandset64((volatile signed __int32 *)v15 + 6, 0x3Fui64) )
{
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)LockHandle);
}
else
{
v16 = v15[35] & 7;
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)LockHandle);
MiRelinkStandbyPage((_MMPFN *)v15, v16, v17);
_InterlockedAnd64((volatile signed __int64 *)v15 + 3, 0x7FFFFFFFFFFFFFFFui64);
}
}
__writecr8(CurrentIrql);
}
KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)LockHandle);
LODWORD(v6) = v19;
__writecr8(CurrentIrql);
}
*((_DWORD *)Partition + 1206) = v6;
}
}Referenced by:
MiWorkingSetManager