MiDeprioritizeVirtualAddresses

void __fastcall MiDeprioritizeVirtualAddresses(unsigned __int64 a1, __int64 a2, _MMSUPPORT_INSTANCE *a3, char a4){
  _KTBFLUSH_TYPE v8; 
  _MMPTE *PteBase; 
  unsigned __int64 v10; 
  _MMPTE *v11; 
  char v12; 
  UINT64 v13; 
  unsigned __int64 v14; 
  unsigned __int64 v15; 
  _MMPFN *v16; 
  __int64 v17; 
  __int64 Blink; 
  char v19; 
  char v20; 
  UINT64 DesiredPriority; 
  int v22; 
  unsigned __int64 v23; 
  INT64 *v24; 
  char WsleFlushList[184]; 

  memset(WsleFlushList, 0i64, sizeof(WsleFlushList));
  v8 = MiTbFlushType(a3);
  *(_QWORD *)&WsleFlushList[16] = 0i64;
  *(_QWORD *)&WsleFlushList[24] = 0i64;
  *(_DWORD *)WsleFlushList = v8;
  v22 = *(&stru_140C4DB30 + 654);
  *(_WORD *)&WsleFlushList[4] = 4;
  *(_DWORD *)&WsleFlushList[8] = 20;
  PteBase = MmGetPteBase();
  v10 = (unsigned __int64)PteBase + ((a1 >> 9) & 0x7FFFFFFFF8i64);
  v11 = 0i64;
  v23 = v10 + 8 * a2;
  MiLockWorkingSetShared();
  v20 = v12;
  if( v10 < v23 )
  {
    do
    {
      v14 = v10 >> 9;
      if( v11 )
      {
        if( v11 != (_MMPTE *)((char *)PteBase + (v14 & 0x7FFFFFFFF8i64)) )
        {
          if( *(_DWORD *)&WsleFlushList[12] )
            MiFreeWsleList(a3, (_MMWSLE_FLUSH_LIST *)WsleFlushList, 0i64);
          MiUnlockPageTableInternal((INT64)a3, (UINT64)v11);
          v11 = 0i64;
        }
        if( v11 )
          goto LABEL_10;
      }
      v11 = MiLockLowestValidPageTable((INT64)a3, (INT64 *)v10, &v24);
      if( v11 == (_MMPTE *)((char *)PteBase + (v14 & 0x7FFFFFFFF8i64)) )
      {
LABEL_10:
        if( (*(_BYTE *)v10 & 1) != 0 )
        {
          LODWORD(v15) = MI_READ_PTE_LOCK_FREE(v10);
          v16 = &MmGetPfnDb()[(v15 >> 12) & 0xFFFFFFFFFi64];
          v17 = (__int64)((v10 << 25) - ((_QWORD)PteBase << 25)) >> 16;
          v19 = MiGetWsleContents(0xFFFFFFFFFi64, v17) & 0xF;
          if( v19 != 9 )
          {
            if( (v16->u4._bf_0 & 0x1000000000i64) == 0 )
            {
              Blink = (__int64)v16->ListEntry.Blink;
              if( Blink > 0 )
                MiDemoteCombinedPte(a3, (_MMPTE *)v10, (_MMPTE *)(Blink | 0x8000000000000000ui64));
            }
            if( (a4 & 8) == 0 && (a4 & 7) != MiGetPfnPriority(v16) )
            {
              HIDWORD(DesiredPriority) = 0;
              while( _interlockedbittestandset64((volatile signed __int32 *)&v16->u2, 0x3Fui64) )
              {
                do
                  KeYieldProcessorEx((UINT64 *)((char *)&DesiredPriority + 4));
                while( v16->u2._bf_0 < 0 );
              }
              MiUpdatePfnPriority(v16, a4 & 7, 1ui64);
              _InterlockedAnd64(&v16->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
            }
            if( (a4 & 0x10) != 0 && v19 != 8 )
            {
              if( v22 )
                MI_WSLE_LOG_ACCESS(a3, (_MMWSLE *)v10, (_MMPTE *)Blink);
              MiInsertTbFlushEntry((_MI_TB_FLUSH_LIST *)WsleFlushList, (VOID *)v17, 1ui64, 0i64);
              if( *(_DWORD *)&WsleFlushList[12] == *(_DWORD *)&WsleFlushList[8] )
                MiFreeWsleList(a3, (_MMWSLE_FLUSH_LIST *)WsleFlushList, 0i64);
            }
          }
          PteBase = MmGetPteBase();
        }
      }
      else
      {
        MiUnlockPageTableInternal((INT64)a3, (UINT64)v11);
        v11 = 0i64;
        v10 = (v10 & 0xFFFFFFFFFFFFF000ui64) + 4088;
      }
      v10 += 8i64;
    }
    while( v10 < v23 );
    if( v11 )
    {
      if( *(_DWORD *)&WsleFlushList[12] )
        MiFreeWsleList(a3, (_MMWSLE_FLUSH_LIST *)WsleFlushList, 0i64);
      MiUnlockPageTableInternal((INT64)a3, (UINT64)v11);
    }
    v12 = v20;
  }
  LOBYTE(v13) = v12;
  MiUnlockWorkingSetShared(a3, v13);
}

Referenced by:

HvTrimHive
MiDeprioritizeVad