MiPurgeZeroList
VOID __stdcall MiPurgeZeroList(_MI_PARTITION *Partition){
unsigned int v2;
unsigned __int64 *p_Flink;
_MMPFN *v4;
unsigned __int64 v5;
INT64 v6;
UINT64 v7;
UINT64 v8;
UINT64 v9;
UINT64 v10;
if( Partition->PageLists.FreeListDiscard )
{
MiPurgeLargeZeroNodePages(Partition);
v2 = 0;
if( *(&stru_140C4DB30 + 67) )
{
p_Flink = &Partition->PageLists.FreePagesByColor[0]->Flink;
do
{
while( 1 )
{
v8 = *p_Flink;
if( *p_Flink == 0xFFFFFFFFFi64 )
break;
v4 = &MmGetPfnDb()[v8];
v5 = MiLockPageInline(v4);
if( v8 <= 0xFFFFFFFFFi64
&& (MmGetPfnDb()[v8].u4._bf_0 & 0x4000000000000i64) != 0
&& (v4->u4._bf_0 & 0x1000000000i64) == 0
&& (*(_BYTE *)(&v4->u3 + 1) & 7) == 0 )
{
MiUnlinkFreeOrZeroedPage(v8, 0i64, 0i64);
MiInsertPageInFreeOrZeroedList(v8, 2ui64, v6, v7, v9, v10);
}
_InterlockedAnd64(&v4->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v5);
}
++v2;
p_Flink += 5;
}
while( v2 < *(&stru_140C4DB30 + 67) );
}
Partition->PageLists.FreeListDiscard = 0;
}
}Referenced by:
MiFinishResume