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