MiPurgeZeroList

VOID __stdcall MiPurgeZeroList(_MI_PARTITION *Partition){
  unsigned int v2; 
  UINT64 *v3; 
  char *v4; 
  unsigned __int64 v5; 
  UINT64 v6; 
  if( *((_BYTE *)Partition + 4829) )
  {
    MiPurgeLargeZeroNodePages(Partition);
    v2 = 0;
    if( dword_140C4DC3C )
    {
      v3 = (UINT64 *)(*((_QWORD *)Partition + 272) + 16i64);
      do
      {
        while( 1 )
        {
          v6 = *v3;
          if( *v3 == 0xFFFFFFFFFi64 )
            break;
          v4 = (char *)MmGetPfnDb() + 48 * v6;
          v5 = (unsigned __int8)MiLockPageInline((INT64)v4);
          if( v6 <= 0xFFFFFFFFFi64
            && (*((_QWORD *)MmGetPfnDb() + 6 * v6 + 5) & 0x4000000000000i64) != 0
            && (*((_QWORD *)v4 + 5) & 0x1000000000i64) == 0
            && (v4[34] & 7) == 0 )
          {
            MiUnlinkFreeOrZeroedPage(v6, 0i64, 0i64);
            MiInsertPageInFreeOrZeroedList(v6, 2ui64);
          }
          _InterlockedAnd64((volatile signed __int64 *)v4 + 3, 0x7FFFFFFFFFFFFFFFui64);
          __writecr8(v5);
        }
        ++v2;
        v3 += 5;
      }
      while( v2 < dword_140C4DC3C );
    }
    *((_BYTE *)Partition + 4829) = 0;
  }
}

Referenced by:

MiFinishResume