MiComputeSystemTrimCriteria

NTSTATUS __stdcall MiComputeSystemTrimCriteria(_MI_PARTITION *Partition, _MMWS_TRIM_CRITERIA *Criteria){
  void *WorkingSetControl; 
  NTSTATUS v5; 
  unsigned __int64 v6; 
  unsigned __int64 v7; 
  _MI_PARTITION *v8; 
  NTSTATUS StandbyRepurposed; 
  int v10; 
  unsigned int v11; 
  unsigned int v12; 
  int v13; 
  unsigned int v14; 
  bool v15; 
  unsigned __int64 v16; 
  unsigned __int8 v17; 
  unsigned int v18; 
  unsigned __int64 v19; 
  unsigned __int64 v20; 
  __int64 v21; 
  int v22; 
  unsigned __int64 v23; 
  unsigned __int64 v24; 
  __int64 v25; 
  NTSTATUS v26; 
  unsigned __int64 v27; 
  int v28; 
  NTSTATUS v29; 
  unsigned int v30; 
  unsigned __int64 v31; 
  unsigned __int8 v32; 
  unsigned __int64 v33; 
  unsigned __int16 v34; 
  unsigned __int64 v35; 
  UINT16 v37; 
  unsigned __int64 v38; 
  unsigned __int64 v39; 
  unsigned __int64 v40; 
  unsigned __int64 AvailablePages; 
  __int64 v42; 
  unsigned __int64 v43; 
  unsigned __int64 v44; 
  unsigned __int64 v45; 
  volatile unsigned __int64 v46; 
  int v47; 
  unsigned int v48; 
  unsigned __int64 v49; 

  WorkingSetControl = Partition->WorkingSetControl;
  v47 = 0;
  v5 = *((_DWORD *)WorkingSetControl + 10);
  LODWORD(v6) = MiGetAvailablePagesBelowPriority(Partition, 6ui64);
  v7 = v6;
  StandbyRepurposed = MiGetStandbyRepurposed(v8, 1ui64);
  v11 = *((_DWORD *)WorkingSetControl + 11);
  v12 = StandbyRepurposed;
  v13 = *((_DWORD *)WorkingSetControl + 30);
  v14 = StandbyRepurposed - v11;
  v15 = v11 < v12;
  *((_DWORD *)WorkingSetControl + 11) = v12;
  v16 = *((_QWORD *)WorkingSetControl + 300);
  v17 = 0;
  v18 = v15 ? v14 : 0;
  v19 = v16 - v7;
  v48 = v18;
  v20 = 0i64;
  if( v7 > v16 )
    v19 = v7 - v16;
  v21 = v13 & 7;
  *((_QWORD *)WorkingSetControl + 275) += (v19 >> 3) - (*((_QWORD *)WorkingSetControl + v21 + 276) >> 3);
  *((_QWORD *)WorkingSetControl + v21 + 276) = v19;
  if( *((_DWORD *)WorkingSetControl + 20) == 4
    && *((_WORD *)WorkingSetControl + 1174)
    && *((_BYTE *)WorkingSetControl + 2350)
    && *((_BYTE *)WorkingSetControl + 2351) )
  {
    v22 = v10;
  }
  else
  {
    v10 = 0;
    v22 = 1;
    if( v7 <= 0x120 )
      v10 = 1;
  }
  v23 = *((_QWORD *)WorkingSetControl + 300);
  v24 = v23;
  if( v10 == v22 )
  {
    v25 = 0i64;
  }
  else
  {
    v10 = 0;
    v25 = v7 - *((_QWORD *)WorkingSetControl + 296);
    v24 = v23 >> 2;
  }
  if( v7 < v24 )
  {
    v38 = v23 - v25;
  }
  else
  {
    if( v7 >= 4 * v23 )
      goto LABEL_10;
    if( v25 >= 0 )
      goto LABEL_10;
    v38 = v23 - v25;
    if( v7 >= v23 - v25 )
      goto LABEL_10;
  }
  v20 = *((_QWORD *)WorkingSetControl + 298);
  v39 = v38 - v7;
  v17 = v22;
  if( v39 <= v20 )
    v20 = v39;
LABEL_10:
  v49 = v18;
  if( v18 >= v7 >> 2 )
  {
    v40 = v18 - (v7 >> 2);
    if( v40 > v20 && v20 < 0x2000 && !v10 )
    {
      v20 = v18 - (v7 >> 2);
      v17 = 3;
      if( v40 > 0x2000 )
        v20 = 0x2000i64;
    }
  }
  v26 = MiGetStandbyRepurposed(Partition, 4ui64);
  v29 = v26;
  if( v20 )
  {
    if( v20 < 0x1000 && !v28 )
      v20 = 4096i64;
  }
  else if( !v28 )
  {
    v30 = v26 - *((_DWORD *)WorkingSetControl + 12);
    if( v30 > 0x20000 )
    {
      AvailablePages = Partition->Vp.AvailablePages;
      if( AvailablePages >= 0x100000 || AvailablePages >= Partition->Vp.NumberOfPhysicalPages >> 2 )
      {
        *((_DWORD *)WorkingSetControl + 12) = v26;
      }
      else
      {
        v20 = 0x8000i64;
        v17 = 2;
      }
    }
    else if( v48 && v30 > 0x18000 && *((_QWORD *)WorkingSetControl + 301) < 0x20000ui64 )
    {
      v47 = 1;
    }
  }
  if( v7 < 4 * v27 )
  {
    v42 = *((_QWORD *)WorkingSetControl + 275);
    v43 = 4 * v42;
    if( 4 * v42 >= v27 )
    {
      v45 = 2 * v42;
      if( 2 * v42 <= v27 )
        goto LABEL_18;
      v44 = *((_QWORD *)WorkingSetControl + 298);
      *((_QWORD *)WorkingSetControl + 300) = v45;
      if( v45 <= v44 )
        goto LABEL_18;
    }
    else
    {
      v44 = *((_QWORD *)WorkingSetControl + 297);
      *((_QWORD *)WorkingSetControl + 300) = v43;
      if( v43 >= v44 )
        goto LABEL_18;
    }
    *((_QWORD *)WorkingSetControl + 300) = v44;
    goto LABEL_18;
  }
  if( v7 > 16 * v27 )
    *((_QWORD *)WorkingSetControl + 300) = *((_QWORD *)WorkingSetControl + 299);
LABEL_18:
  *((_QWORD *)WorkingSetControl + 296) = v7;
  if( !v20 )
  {
    v31 = *((_QWORD *)WorkingSetControl + 295);
    v32 = 0;
    if( v31 )
    {
      if( v31 > *((_QWORD *)WorkingSetControl + 301) )
      {
        v33 = v49;
        v32 = 10;
        if( *((_WORD *)WorkingSetControl + 1173) < 0xFAu )
          *((_WORD *)WorkingSetControl + 1173) = 250;
        goto LABEL_25;
      }
      *((_QWORD *)WorkingSetControl + 295) = 0i64;
    }
    if( *((_QWORD *)WorkingSetControl + 301) >= (unsigned __int64)(4i64 * *((_QWORD *)WorkingSetControl + 298)) )
      goto LABEL_48;
    if( !*((_WORD *)WorkingSetControl + 1173) )
      goto LABEL_22;
    v37 = MiComputeAgeDistribution(Partition, 1ui64);
    *((_WORD *)WorkingSetControl + 1173) = v37;
    if( v37 )
      v32 = 11;
    if( v32 )
    {
LABEL_48:
      v33 = v49;
    }
    else
    {
LABEL_22:
      v33 = v49;
      if( v49 >= v7 >> 4 )
      {
        v32 = 9;
      }
      else if( v47 == 1 )
      {
        v32 = 8;
      }
    }
LABEL_25:
    v34 = *((_WORD *)WorkingSetControl + 1174);
    if( v34 )
    {
      if( *((_WORD *)WorkingSetControl + 1173) < v34 )
        *((_WORD *)WorkingSetControl + 1173) = v34;
      if( !v32 )
      {
        v32 = 12;
        *((_WORD *)WorkingSetControl + 1173) = v34;
      }
    }
    Criteria->_bf_0 = 0;
    *(_QWORD *)&Criteria[1].PagesToTrim = 0i64;
    *(_QWORD *)&Criteria[1].ClaimDistribution[4] = 0i64;
    *(_QWORD *)&Criteria[1].ClaimDistribution[2] = Partition->Vp.AvailablePages;
    *(_QWORD *)&Criteria[1].PagesTrimmed = 0i64;
    Criteria->TrimReason = v32;
    *(_OWORD *)Criteria->ClaimDistribution = 0i64;
    *(_OWORD *)&Criteria->ClaimDistribution[4] = 0i64;
    *(_OWORD *)&Criteria->PagesToTrim = 0i64;
    *(_OWORD *)&Criteria[1]._bf_0 = 0i64;
    if( v32 )
    {
      ++*((_DWORD *)WorkingSetControl + v32 + 622);
      v5 |= 2u;
    }
    else if( *((_BYTE *)WorkingSetControl + 55) == 1 )
    {
      v5 |= 0x80u;
      *((_WORD *)WorkingSetControl + 1173) = 10;
    }
    else if( !v5 )
    {
      v5 = 64;
    }
    goto LABEL_32;
  }
  MiPulseLowAvailableEvent(Partition);
  if( (unsigned __int8)(v17 - 2) <= 1u )
    *((_QWORD *)WorkingSetControl + 295) = v20;
  *(_QWORD *)&Criteria[1].ClaimDistribution[4] = v20;
  Criteria->_bf_0 = 0;
  *(_QWORD *)&Criteria[1].PagesToTrim = 0i64;
  v5 |= 1u;
  v46 = Partition->Vp.AvailablePages;
  *(_QWORD *)&Criteria[1].PagesTrimmed = 0i64;
  *(_QWORD *)&Criteria[1].ClaimDistribution[2] = v20 + v46;
  v33 = v49;
  Criteria->TrimReason = v17;
  *(_OWORD *)Criteria->ClaimDistribution = 0i64;
  *(_OWORD *)&Criteria->ClaimDistribution[4] = 0i64;
  *(_OWORD *)&Criteria->PagesToTrim = 0i64;
  *(_OWORD *)&Criteria[1]._bf_0 = 0i64;
  *((_DWORD *)WorkingSetControl + 12) = v29;
  ++*((_DWORD *)WorkingSetControl + v17 + 622);
LABEL_32:
  if( v7 && v33 < v7 )
    v35 = 100 * v48 / v7;
  else
    LOBYTE(v35) = 100;
  Criteria->StandbyRemovedPercentage = v35;
  if( (v5 & 1) == 0 )
    Criteria->AgingPolicy = 1;
  return v5;
}

Referenced by:

MiProcessWorkingSets