MiTrimWorkingSet

NTSTATUS __stdcall MiTrimWorkingSet(
        _MMSUPPORT_INSTANCE *WsInfo,
        UINT64 DesiredReduction,
        UINT8 WsIrql,
        UINT64 MinimumTrimAge,
        UINT64 TrimFlags){
  __int64 v6; 
  int v9; 
  unsigned __int64 WorkingSetSize; 
  _KTBFLUSH_TYPE v11; 
  int v12; 
  int v13; 
  bool v14; 
  _MMWSL_INSTANCE *VmWorkingSetList; 
  __int64 v16; 
  unsigned __int64 *v17; 
  __int64 v18; 
  CHAR *RandomPte; 
  INT64 v20; 
  INT64 v22; 
  INT64 v23[22]; 
  __int64 v24[52]; 
  int v25[68]; 

  v6 = (unsigned int)MinimumTrimAge;
  memset(v24, 0i64, 0x198u);
  memset(v23, 0i64, sizeof(v23));
  memset(v25, 0i64, 0x108u);
  v9 = v6 & 0xF;
  LODWORD(v24[0]) = v9;
  if( (TrimFlags & 2) != 0 )
  {
    v9 |= 0x20u;
    LODWORD(v24[0]) = v9;
  }
  if( (TrimFlags & 4) != 0 )
  {
    v9 |= 0x40u;
    LODWORD(v24[0]) = v9;
  }
  if( (TrimFlags & 1) != 0 )
  {
    v9 |= 0x80u;
    LODWORD(v24[0]) = v9;
  }
  if( (TrimFlags & 8) != 0 )
  {
    v9 |= 0x100u;
    LODWORD(v24[0]) = v9;
  }
  if( (TrimFlags & 0x40) != 0 )
  {
    v9 |= 0x1000u;
    LODWORD(v24[0]) = v9;
  }
  if( (TrimFlags & 0x10) != 0 )
  {
    WorkingSetSize = WsInfo->WorkingSetSize;
    v9 |= 0x400u;
    LODWORD(v24[0]) = v9;
    v24[6] = WorkingSetSize;
    if( DesiredReduction > WorkingSetSize )
      DesiredReduction = WorkingSetSize;
    if( (TrimFlags & 0x20) != 0 )
    {
      v9 |= 0x800u;
      LODWORD(v24[0]) = v9;
    }
  }
  if( *(&stru_140C4DB30 + 654) )
    LODWORD(v24[0]) = v9 | 0x10;
  v24[8] = 20i64;
  v11 = MiTbFlushType(WsInfo);
  v14 = (WsInfo->Flags._bf_0 & 7) == 0;
  LODWORD(v24[7]) = v11;
  WORD2(v24[7]) = 4;
  v24[9] = 0i64;
  v24[10] = 0i64;
  if( v14 && WsInfo[3].AgeDistribution[1] )
  {
    v25[1] = 32;
    v24[30] = (__int64)v25;
  }
  VmWorkingSetList = WsInfo->VmWorkingSetList;
  v16 = 0i64;
  if( (unsigned int)v6 >= 8 )
    return 0;
  v17 = &WsInfo->AgeDistribution[v6];
  v18 = (unsigned int)(8 - v6);
  do
  {
    v16 += *v17++;
    --v18;
  }
  while( v18 );
  v24[5] = v16;
  if( !v16 )
    return 0;
  v24[1] = DesiredReduction;
  BYTE4(v23[0]) = v24[0] & 0xF;
  v23[21] = (INT64)v24;
  LOWORD(v23[0]) = 22;
  v23[19] = (INT64)MiTrimPte;
  v23[20] = (INT64)MiTrimWorkingSetTail;
  v23[3] = (INT64)WsInfo;
  BYTE6(v23[0]) = WsIrql;
  if( (v12 & v13) != 0 )
  {
    RandomPte = MiGenerateRandomPte((INT64)v23);
    v23[7] = (INT64)RandomPte;
  }
  else
  {
    RandomPte = (CHAR *)VmWorkingSetList->NextPteToTrim;
    v23[7] = (INT64)VmWorkingSetList->NextPteToTrim;
  }
  v20 = v23[5];
  if( !RandomPte )
    v20 = -1i64;
  v23[5] = v20;
  MiWalkPageTables((INT64)v23);
  LODWORD(v22) = TrimFlags;
  MiLogTrimWs((INT64)WsInfo, v24[4], v24[2], (unsigned int)v6, v22);
  return v24[2];
}

Referenced by:

MiForcedTrim
MiReduceWs
MiTrimOrAgeWorkingSet