MiPurgePartitionStandby
VOID __stdcall MiPurgePartitionStandby(_MI_PARTITION *Partition, UINT64 EndPurgeIndex){
unsigned int v2;
unsigned __int8 CurrentIrql;
UINT64 v5;
UINT64 v6;
char *v7;
BOOL IsFreeZeroPfnCold;
UINT64 SpinCount;
v2 = EndPurgeIndex;
while( 1 )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v5 = MiRemoveLowestPriorityStandbyPage(Partition, v2, 0x2000ui64);
v6 = v5;
if( v5 == -1i64 )
break;
v7 = (char *)MmGetPfnDb() + 48 * v5;
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)v7 + 6, 0x3Fui64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( *((__int64 *)v7 + 3) < 0 );
}
*((_QWORD *)v7 + 3) |= 0x4000000000000000ui64;
IsFreeZeroPfnCold = MiIsFreeZeroPfnCold((INT64)v7);
MiInsertPageInFreeOrZeroedList(v6, IsFreeZeroPfnCold ? 1026 : 2);
_InterlockedAnd64((volatile signed __int64 *)v7 + 3, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(CurrentIrql);
}
__writecr8(CurrentIrql);
}Referenced by:
MiFinishResume
MiTrimAllSystemPagableMemory
MmPerformMemoryListCommand