MiConvertAndFlushWsleVas

VOID __fastcall MiConvertAndFlushWsleVas(INT64 a1, INT64 a2){
  unsigned __int64 v4; 
  __int64 v5; 
  UINT8 v6; 
  _MMPTE *v7; 
  __int64 v8; 
  _MMPTE *PteBase; 
  UINT64 v10; 
  INT64 v11; 
  unsigned __int64 v12; 
  _MMPFN *PfnDb; 
  UINT8 v14; 
  INT64 v15; 
  _MMPTE *v16; 
  if( *(_DWORD *)(a2 + 12) )
  {
    v4 = *(_QWORD *)(a2 + 24);
    v5 = 0i64;
    v6 = MiLockWorkingSetShared(a1);
    v14 = v6;
    v7 = MiLockLowestValidPageTable(
           a1,
           (INT64 *)((char *)MmGetPteBase() + ((v4 >> 9) & 0x7FFFFFFFF8i64)),
           (INT64 **)&v15);
    v16 = v7;
    if( v7 == (_MMPTE *)((char *)MmGetPdeBase() + ((v4 >> 18) & 0x3FFFFFF8)) )
    {
      v8 = 0i64;
      if( *(_DWORD *)(a2 + 12) )
      {
        PteBase = MmGetPteBase();
        do
        {
          v10 = *(_QWORD *)(a2 + 8 * v8 + 24);
          v15 = MI_READ_PTE_LOCK_FREE((INT64)PteBase + ((v10 >> 9) & 0x7FFFFFFFF8i64));
          if( (v15 & 1) != 0 && (MiGetWsleContents(v11, v10) & 0xF) != 10 )
          {
            v12 = 6 * (((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)&v15) >> 12) & 0xFFFFFFFFFi64);
            PfnDb = MmGetPfnDb();
            if( (*((_QWORD *)PfnDb + v12 + 5) & 0x1000000000i64) != 0 || *((__int64 *)PfnDb + v12 + 1) <= 0 )
            {
              *(_QWORD *)(a2 + 8 * v5 + 24) = *(_QWORD *)(a2 + 8 * v8 + 24);
              v5 = (unsigned int)(v5 + 1);
            }
          }
          v8 = (unsigned int)(v8 + 1);
        }
        while( (unsigned int)v8 < *(_DWORD *)(a2 + 12) );
        v7 = v16;
        v6 = v14;
      }
      if( (_DWORD)v5 )
      {
        *(_DWORD *)(a2 + 12) = v5;
        MiFreeWsleList(a1, a2, 0);
      }
      else
      {
        *(_DWORD *)(a2 + 12) = 0;
      }
    }
    else
    {
      *(_DWORD *)(a2 + 12) = 0;
    }
    MiUnlockPageTableInternal(a1, (UINT64)v7);
    MiUnlockWorkingSetShared(a1, v6);
  }
}

Referenced by:

MiEliminateZeroPages