MiDeprioritizeVirtualAddresses

INT64 __fastcall MiDeprioritizeVirtualAddresses(UINT64 a1, INT64 a2, INT64 a3, CHAR a4){
  int v8; 
  _MMPTE *PteBase; 
  unsigned __int64 v10; 
  MMPTE *v11; 
  INT64 v12; 
  UINT8 v13; 
  unsigned __int64 v14; 
  char *v15; 
  __int64 v16; 
  char v17; 
  __int64 v18; 
  UINT8 v20; 
  UINT64 SpinCount; 
  unsigned __int64 v22; 
  INT64 *v23; 
  int result; 
  __int16 result_4; 
  int v26; 
  int v27; 
  __int64 v28; 
  __int64 v29; 
  memset((INT64)&result, 0i64);
  v8 = MiTbFlushType(a3);
  v28 = 0i64;
  v29 = 0i64;
  result = v8;
  HIDWORD(SpinCount) = dword_140C4E568;
  result_4 = 4;
  v26 = 20;
  PteBase = MmGetPteBase();
  v10 = (unsigned __int64)PteBase + ((a1 >> 9) & 0x7FFFFFFFF8i64);
  v11 = 0i64;
  v22 = v10 + 8 * a2;
  v13 = MiLockWorkingSetShared(v12);
  v20 = v13;
  if( v10 < v22 )
  {
    do
    {
      v14 = v10 >> 9;
      if( v11 )
      {
        if( v11 != (_MMPTE *)((char *)PteBase + (v14 & 0x7FFFFFFFF8i64)) )
        {
          if( v27 )
            MiFreeWsleList(a3, (INT64)&result, 0);
          MiUnlockPageTableInternal(a3, (UINT64)v11);
          v11 = 0i64;
        }
        if( v11 )
          goto LABEL_10;
      }
      v11 = MiLockLowestValidPageTable(a3, (INT64 *)v10, &v23);
      if( v11 == (_MMPTE *)((char *)PteBase + (v14 & 0x7FFFFFFFF8i64)) )
      {
LABEL_10:
        if( (*(_BYTE *)v10 & 1) != 0 )
        {
          v15 = (char *)MmGetPfnDb() + 48 * (((unsigned __int64)MI_READ_PTE_LOCK_FREE(v10) >> 12) & 0xFFFFFFFFFi64);
          v16 = (__int64)((v10 << 25) - ((_QWORD)PteBase << 25)) >> 16;
          v17 = MiGetWsleContents(0xFFFFFFFFFi64, v16) & 0xF;
          if( v17 != 9 )
          {
            if( (*((_QWORD *)v15 + 5) & 0x1000000000i64) == 0 )
            {
              v18 = *((_QWORD *)v15 + 1);
              if( v18 > 0 )
                MiDemoteCombinedPte((_MMSUPPORT_INSTANCE *)a3, (_MMPTE *)v10, (_MMPTE *)(v18 | 0x8000000000000000ui64));
            }
            if( (a4 & 8) == 0 && (a4 & 7) != (unsigned int)MiGetPfnPriority((INT64)v15) )
            {
              LODWORD(SpinCount) = 0;
              while( _interlockedbittestandset64((volatile signed __int32 *)v15 + 6, 0x3Fui64) )
              {
                do
                  KeYieldProcessorEx(&SpinCount);
                while( *((__int64 *)v15 + 3) < 0 );
              }
              MiUpdatePfnPriority((INT64)v15);
              _InterlockedAnd64((volatile signed __int64 *)v15 + 3, 0x7FFFFFFFFFFFFFFFui64);
            }
            if( (a4 & 0x10) != 0 && v17 != 8 )
            {
              if( HIDWORD(SpinCount) )
                MI_WSLE_LOG_ACCESS(a3, v10);
              MiInsertTbFlushEntry((INT64)&result, v16, 1i64, 0i64);
              if( v27 == v26 )
                MiFreeWsleList(a3, (INT64)&result, 0);
            }
          }
          PteBase = MmGetPteBase();
        }
      }
      else
      {
        MiUnlockPageTableInternal(a3, (UINT64)v11);
        v11 = 0i64;
        v10 = (v10 & 0xFFFFFFFFFFFFF000ui64) + 4088;
      }
      v10 += 8i64;
    }
    while( v10 < v22 );
    if( v11 )
    {
      if( v27 )
        MiFreeWsleList(a3, (INT64)&result, 0);
      MiUnlockPageTableInternal(a3, (UINT64)v11);
    }
    v13 = v20;
  }
  return MiUnlockWorkingSetShared(a3, v13);
}

Referenced by:

HvTrimHive
MiDeprioritizeVad