MiComputeSystemTrimCriteria

__int64 __fastcall MiComputeSystemTrimCriteria(_QWORD *a1, __int64 a2){
  __int64 v2; 
  unsigned int v5; 
  UINT64 AvailablePagesBelowPriority; 
  _MI_PARTITION *v7; 
  unsigned int StandbyRepurposed; 
  int v9; 
  unsigned int v10; 
  unsigned int v11; 
  int v12; 
  unsigned int v13; 
  bool v14; 
  unsigned __int64 v15; 
  unsigned __int8 v16; 
  unsigned int v17; 
  UINT64 v18; 
  unsigned __int64 v19; 
  __int64 v20; 
  int v21; 
  UINT64 v22; 
  UINT64 v23; 
  __int64 v24; 
  int v25; 
  unsigned __int64 v26; 
  int v27; 
  int v28; 
  unsigned int v29; 
  unsigned __int64 v30; 
  unsigned __int8 v31; 
  UINT64 v32; 
  unsigned __int16 v33; 
  unsigned __int64 v34; 
  UINT16 v36; 
  UINT64 v37; 
  unsigned __int64 v38; 
  unsigned __int64 v39; 
  unsigned __int64 v40; 
  __int64 v41; 
  unsigned __int64 v42; 
  unsigned __int64 v43; 
  unsigned __int64 v44; 
  __int64 v45; 
  int v46; 
  unsigned int v47; 
  UINT64 v48; 
  v2 = a1[856];
  v46 = 0;
  v5 = *(_DWORD *)(v2 + 40);
  AvailablePagesBelowPriority = MiGetAvailablePagesBelowPriority((_MI_PARTITION *)a1, 6ui64);
  StandbyRepurposed = MiGetStandbyRepurposed(v7, 1ui64);
  v10 = *(_DWORD *)(v2 + 44);
  v11 = StandbyRepurposed;
  v12 = *(_DWORD *)(v2 + 120);
  v13 = StandbyRepurposed - v10;
  v14 = v10 < v11;
  *(_DWORD *)(v2 + 44) = v11;
  v15 = *(_QWORD *)(v2 + 2400);
  v16 = 0;
  v17 = v14 ? v13 : 0;
  v18 = v15 - AvailablePagesBelowPriority;
  v47 = v17;
  v19 = 0i64;
  if( AvailablePagesBelowPriority > v15 )
    v18 = AvailablePagesBelowPriority - v15;
  v20 = v12 & 7;
  *(_QWORD *)(v2 + 2200) += (v18 >> 3) - (*(_QWORD *)(v2 + 8 * v20 + 2208) >> 3);
  *(_QWORD *)(v2 + 8 * v20 + 2208) = v18;
  if( *(_DWORD *)(v2 + 80) == 4 && *(_WORD *)(v2 + 2348) && *(_BYTE *)(v2 + 2350) && *(_BYTE *)(v2 + 2351) )
  {
    v21 = v9;
  }
  else
  {
    v9 = 0;
    v21 = 1;
    if( AvailablePagesBelowPriority <= 0x120 )
      v9 = 1;
  }
  v22 = *(_QWORD *)(v2 + 2400);
  v23 = v22;
  if( v9 == v21 )
  {
    v24 = 0i64;
  }
  else
  {
    v9 = 0;
    v24 = AvailablePagesBelowPriority - *(_QWORD *)(v2 + 2368);
    v23 = v22 >> 2;
  }
  if( AvailablePagesBelowPriority < v23 )
  {
    v37 = v22 - v24;
  }
  else
  {
    if( AvailablePagesBelowPriority >= 4 * v22 )
      goto LABEL_10;
    if( v24 >= 0 )
      goto LABEL_10;
    v37 = v22 - v24;
    if( AvailablePagesBelowPriority >= v22 - v24 )
      goto LABEL_10;
  }
  v19 = *(_QWORD *)(v2 + 2384);
  v38 = v37 - AvailablePagesBelowPriority;
  v16 = v21;
  if( v38 <= v19 )
    v19 = v38;
LABEL_10:
  v48 = v17;
  if( v17 >= AvailablePagesBelowPriority >> 2 )
  {
    v39 = v17 - (AvailablePagesBelowPriority >> 2);
    if( v39 > v19 && v19 < 0x2000 && !v9 )
    {
      v19 = v17 - (AvailablePagesBelowPriority >> 2);
      v16 = 3;
      if( v39 > 0x2000 )
        v19 = 0x2000i64;
    }
  }
  v25 = MiGetStandbyRepurposed((_MI_PARTITION *)a1, 4ui64);
  v28 = v25;
  if( v19 )
  {
    if( v19 < 0x1000 && !v27 )
      v19 = 4096i64;
  }
  else if( !v27 )
  {
    v29 = v25 - *(_DWORD *)(v2 + 48);
    if( v29 > 0x20000 )
    {
      v40 = a1[888];
      if( v40 >= 0x100000 || v40 >= a1[866] >> 2 )
      {
        *(_DWORD *)(v2 + 48) = v25;
      }
      else
      {
        v19 = 0x8000i64;
        v16 = 2;
      }
    }
    else if( v47 && v29 > 0x18000 && *(_QWORD *)(v2 + 2408) < 0x20000ui64 )
    {
      v46 = 1;
    }
  }
  if( AvailablePagesBelowPriority < 4 * v26 )
  {
    v41 = *(_QWORD *)(v2 + 2200);
    v42 = 4 * v41;
    if( 4 * v41 >= v26 )
    {
      v44 = 2 * v41;
      if( 2 * v41 <= v26 )
        goto LABEL_18;
      v43 = *(_QWORD *)(v2 + 2384);
      *(_QWORD *)(v2 + 2400) = v44;
      if( v44 <= v43 )
        goto LABEL_18;
    }
    else
    {
      v43 = *(_QWORD *)(v2 + 2376);
      *(_QWORD *)(v2 + 2400) = v42;
      if( v42 >= v43 )
        goto LABEL_18;
    }
    *(_QWORD *)(v2 + 2400) = v43;
    goto LABEL_18;
  }
  if( AvailablePagesBelowPriority > 16 * v26 )
    *(_QWORD *)(v2 + 2400) = *(_QWORD *)(v2 + 2392);
LABEL_18:
  *(_QWORD *)(v2 + 2368) = AvailablePagesBelowPriority;
  if( !v19 )
  {
    v30 = *(_QWORD *)(v2 + 2360);
    v31 = 0;
    if( v30 )
    {
      if( v30 > *(_QWORD *)(v2 + 2408) )
      {
        v32 = v48;
        v31 = 10;
        if( *(_WORD *)(v2 + 2346) < 0xFAu )
          *(_WORD *)(v2 + 2346) = 250;
        goto LABEL_25;
      }
      *(_QWORD *)(v2 + 2360) = 0i64;
    }
    if( *(_QWORD *)(v2 + 2408) >= (unsigned __int64)(4i64 * *(_QWORD *)(v2 + 2384)) )
      goto LABEL_48;
    if( !*(_WORD *)(v2 + 2346) )
      goto LABEL_22;
    v36 = MiComputeAgeDistribution((_MI_PARTITION *)a1, 1ui64);
    *(_WORD *)(v2 + 2346) = v36;
    if( v36 )
      v31 = 11;
    if( v31 )
    {
LABEL_48:
      v32 = v48;
    }
    else
    {
LABEL_22:
      v32 = v48;
      if( v48 >= AvailablePagesBelowPriority >> 4 )
      {
        v31 = 9;
      }
      else if( v46 == 1 )
      {
        v31 = 8;
      }
    }
LABEL_25:
    v33 = *(_WORD *)(v2 + 2348);
    if( v33 )
    {
      if( *(_WORD *)(v2 + 2346) < v33 )
        *(_WORD *)(v2 + 2346) = v33;
      if( !v31 )
      {
        v31 = 12;
        *(_WORD *)(v2 + 2346) = v33;
      }
    }
    *(_BYTE *)a2 = 0;
    *(_QWORD *)(a2 + 96) = 0i64;
    *(_QWORD *)(a2 + 80) = 0i64;
    *(_QWORD *)(a2 + 72) = a1[888];
    *(_QWORD *)(a2 + 104) = 0i64;
    *(_BYTE *)(a2 + 2) = v31;
    *(_OWORD *)(a2 + 8) = 0i64;
    *(_OWORD *)(a2 + 24) = 0i64;
    *(_OWORD *)(a2 + 40) = 0i64;
    *(_OWORD *)(a2 + 56) = 0i64;
    if( v31 )
    {
      ++*(_DWORD *)(v2 + 4i64 * v31 + 2488);
      v5 |= 2u;
    }
    else if( *(_BYTE *)(v2 + 55) == 1 )
    {
      v5 |= 0x80u;
      *(_WORD *)(v2 + 2346) = 10;
    }
    else if( !v5 )
    {
      v5 = 64;
    }
    goto LABEL_32;
  }
  MiPulseLowAvailableEvent((_MI_PARTITION *)a1);
  if( (unsigned __int8)(v16 - 2) <= 1u )
    *(_QWORD *)(v2 + 2360) = v19;
  *(_QWORD *)(a2 + 80) = v19;
  *(_BYTE *)a2 = 0;
  *(_QWORD *)(a2 + 96) = 0i64;
  v5 |= 1u;
  v45 = a1[888];
  *(_QWORD *)(a2 + 104) = 0i64;
  *(_QWORD *)(a2 + 72) = v19 + v45;
  v32 = v48;
  *(_BYTE *)(a2 + 2) = v16;
  *(_OWORD *)(a2 + 8) = 0i64;
  *(_OWORD *)(a2 + 24) = 0i64;
  *(_OWORD *)(a2 + 40) = 0i64;
  *(_OWORD *)(a2 + 56) = 0i64;
  *(_DWORD *)(v2 + 48) = v28;
  ++*(_DWORD *)(v2 + 4i64 * v16 + 2488);
LABEL_32:
  if( AvailablePagesBelowPriority && v32 < AvailablePagesBelowPriority )
    v34 = 100 * v47 / AvailablePagesBelowPriority;
  else
    LOBYTE(v34) = 100;
  *(_BYTE *)(a2 + 3) = v34;
  if( (v5 & 1) == 0 )
    *(_BYTE *)(a2 + 4) = 1;
  return v5;
}

Referenced by:

MiProcessWorkingSets