MiConvertAndFlushWsleVas

VOID __stdcall MiConvertAndFlushWsleVas(_MMSUPPORT_INSTANCE *Vm, _MMWSLE_FLUSH_LIST *WsleFlushList){
  unsigned __int64 v4; 
  __int64 v5; 
  char v6; 
  char v7; 
  _MMPTE *v8; 
  __int64 v9; 
  _MMPTE *PteBase; 
  UINT64 v11; 
  INT64 v12; 
  INT64 v13; 
  unsigned __int64 v14; 
  __int64 v15; 
  _MMPFN *PfnDb; 
  UINT64 v17; 
  char v18; 
  INT64 v19; 
  _MMPTE *v20; 

  if( WsleFlushList->FlushIndex[2] )
  {
    v4 = *(_QWORD *)&WsleFlushList->FlushIndex[5];
    v5 = 0i64;
    MiLockWorkingSetShared();
    v7 = v6;
    v18 = v6;
    v8 = MiLockLowestValidPageTable(
           (INT64)Vm,
           (INT64 *)((char *)MmGetPteBase() + ((v4 >> 9) & 0x7FFFFFFFF8i64)),
           (INT64 **)&v19);
    v20 = v8;
    if( v8 == (_MMPTE *)((char *)MmGetPdeBase() + ((v4 >> 18) & 0x3FFFFFF8)) )
    {
      v9 = 0i64;
      if( WsleFlushList->FlushIndex[2] )
      {
        PteBase = MmGetPteBase();
        do
        {
          v11 = *(_QWORD *)&WsleFlushList->FlushIndex[2 * v9 + 5];
          LODWORD(v12) = MI_READ_PTE_LOCK_FREE((INT64)PteBase + ((v11 >> 9) & 0x7FFFFFFFF8i64));
          v19 = v12;
          if( (v12 & 1) != 0 && (MiGetWsleContents(v13, v11) & 0xF) != 10 )
          {
            LODWORD(v14) = MI_READ_PTE_LOCK_FREE((INT64)&v19);
            v15 = (v14 >> 12) & 0xFFFFFFFFFi64;
            PfnDb = MmGetPfnDb();
            if( (PfnDb[v15].u4._bf_0 & 0x1000000000i64) != 0 || (__int64)PfnDb[v15].ListEntry.Blink <= 0 )
            {
              *(_QWORD *)&WsleFlushList->FlushIndex[2 * v5 + 5] = *(_QWORD *)&WsleFlushList->FlushIndex[2 * v9 + 5];
              v5 = (unsigned int)(v5 + 1);
            }
          }
          v9 = (unsigned int)(v9 + 1);
        }
        while( (unsigned int)v9 < WsleFlushList->FlushIndex[2] );
        v8 = v20;
        v7 = v18;
      }
      if( (_DWORD)v5 )
      {
        WsleFlushList->FlushIndex[2] = v5;
        MiFreeWsleList(Vm, WsleFlushList, 0i64);
      }
      else
      {
        WsleFlushList->FlushIndex[2] = 0;
      }
    }
    else
    {
      WsleFlushList->FlushIndex[2] = 0;
    }
    MiUnlockPageTableInternal((INT64)Vm, (UINT64)v8);
    LOBYTE(v17) = v7;
    MiUnlockWorkingSetShared(Vm, v17);
  }
}

Referenced by:

MiEliminateZeroPages