MiFreeWsleList

NTSTATUS __stdcall MiFreeWsleList(_MMSUPPORT_INSTANCE *Vm, _MMWSLE_FLUSH_LIST *WsleFlushList, UINT64 Flags){
  CHAR v3; 
  unsigned __int64 v6; 
  _KTBFLUSH_TYPE v7; 
  bool v8; 
  __int64 v9; 
  unsigned int i; 
  unsigned __int64 j; 
  CHAR *v12; 
  unsigned __int64 v13; 
  __int64 v14; 
  CHAR *v15; 
  __int64 v16; 
  INT64 v18; 
  __int64 v19; 
  __int64 v20; 
  __int64 v21; 
  char v22[152]; 
  CHAR v23[8]; 

  v3 = Flags;
  memset(v22, 0i64, sizeof(v22));
  v6 = WsleFlushList->FlushIndex[2];
  v19 = 20i64;
  v7 = MiTbFlushType(Vm);
  v8 = (Vm->Flags._bf_0 & 7) == 0;
  v9 = 0i64;
  v18 = (unsigned int)v7;
  v20 = 0i64;
  v21 = 0i64;
  if( v8 && KeGetCurrentThread()->ApcState.Process->Vm.Instance.VmWorkingSetList[9].NextPteToTrim )
    v3 |= 2u;
  for( i = 0; i < 2; ++i )
  {
    for( j = 0i64; j < v6; ++j )
    {
      v12 = &v23[8 * j + 1];
      v13 = *(_QWORD *)&v12[(char *)WsleFlushList - &v23[1] + 24] & 0xFFFFFFFFFFFFF000ui64;
      if( i )
      {
        if( *(_QWORD *)&v23[8 * j] )
          *(_WORD *)&v23[8 * j] = MiWsleFree((INT64)Vm, v13, v3);
        else
          *v12 &= ~1u;
      }
      else
      {
        LODWORD(v14) = MiWsleFlush((INT64)Vm, v13, v3, (INT64)&v18);
        *(_QWORD *)&v23[8 * j] = v14;
        if( !v14 )
          ++v9;
      }
    }
    if( !i )
      MiFlushTbList((_MI_TB_FLUSH_LIST *)&v18);
  }
  if( v9 != v6 )
  {
    v15 = MiRemoveWsleList((INT64)Vm, (INT64)WsleFlushList, v23, v6, v18, v19, v20, v21);
    if( v15 )
    {
      v16 = (_QWORD)MmGetPteBase() << 25;
      MiRebuildPageTableLeafAges(v16, (((((_QWORD)v15 << 25) - v16) >> 16 << 25) - v16) >> 16);
    }
  }
  WsleFlushList->FlushIndex[2] = 0;
  return v9;
}

Referenced by:

MiAgePteWorker
MiAgeWorkingSetTail
MiConvertAndFlushWsleVas
MiDeprioritizeVirtualAddresses
MiEmptyWorkingSetHelper
MiEmptyWorkingSetTail
MiMakeVaRangeNoAccess
MiSetProtectionOnSection
MiSharePages
MiTrimSharedPageFromViews
MiTrimWorkingSetBuildup
MiUpdateOldWorkingSetPagesTail
MmProtectPool
NtUnlockVirtualMemory