MiAdjustModifiedPageLoad

VOID __stdcall MiAdjustModifiedPageLoad(_MI_PARTITION *Partition, UINT64 AvailableAverage, UINT64 SecondCounter){
  unsigned __int64 v3; 
  unsigned __int64 v5; 
  char v7; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  UINT64 v11; 
  unsigned __int64 v12; 
  int v13; 
  unsigned int v14; 
  char *v15; 
  __int64 v16; 
  __int64 v17; 
  unsigned __int64 v18; 
  unsigned __int64 v19; 
  unsigned __int64 v20; 
  __int64 v21; 
  signed __int64 v22; 
  __int64 v23; 
  unsigned __int64 v24; 
  __int64 v25; 
  char v26; 
  int v27[14]; 
  v3 = *((_QWORD *)Partition + 950);
  v5 = 0x4000i64;
  if( *((_QWORD *)Partition + 888) >> 5 > 0x4000ui64 )
    v5 = *((_QWORD *)Partition + 888) >> 5;
  v7 = SecondCounter;
  v8 = *((_QWORD *)Partition + 888) >> 4;
  if( v8 >= v5 )
    v8 = v5;
  v9 = *((_QWORD *)Partition + 280) + *((_QWORD *)Partition + 288);
  v10 = *(_QWORD *)(*((_QWORD *)Partition + 856) + 2384i64);
  v11 = 0i64;
  v12 = 20000i64;
  if( v10 > 0x4E20 )
    v12 = v10;
  if( v9 > v12 && v3 < v9 / 0xA )
    goto LABEL_9;
  if( v3 >= v8 )
  {
    v11 = v8 >> 1;
LABEL_36:
    if( !(unsigned int)MiUseLowIoPriorityForModifiedPages(Partition) )
      v11 = -1i64;
    MiWakeModifiedPageWriter(Partition, v11);
    *((_QWORD *)Partition + 102) = 0i64;
    *((_QWORD *)Partition + 103) = 0i64;
    goto LABEL_9;
  }
  v19 = 15i64 * (*((_QWORD *)Partition + 103) >> 4);
  v20 = v19 + (v3 >> 4);
  *((_QWORD *)Partition + 103) = v20;
  if( v19 > v20 )
    goto LABEL_36;
  if( v3 < 0x320 )
  {
    *((_QWORD *)Partition + 102) = 0i64;
    goto LABEL_9;
  }
  v21 = *((_QWORD *)Partition + 102);
  v22 = v20 <= v3 ? v20 - v3 + v21 : v3 + v21 - v20;
  v23 = v22 + v3;
  *((_QWORD *)Partition + 102) = v22 + v3;
  if( v22 > (__int64)(v22 + v3) )
    goto LABEL_36;
  v24 = v8 >> 1;
  v25 = 0x7FFFFFFFFFFFFFFFi64;
  if( v24 < 0x369D0369D0369Di64 )
    v25 = 600 * v24;
  if( v23 >= v25 )
    goto LABEL_36;
LABEL_9:
  *((_QWORD *)Partition + 104) = AvailableAverage;
  if( (v7 & 7) == 0 )
  {
    v13 = 0;
    if( (*((_BYTE *)Partition + 876) & 1) != 0 )
    {
      _InterlockedOr(v27, 0);
      if( AvailableAverage > 0x4000 || KiQueryUnbiasedInterruptTime(1u) - *((_QWORD *)Partition + 108) >= 0x47868C00 )
      {
        v13 = 1;
        *((_WORD *)Partition + 438) &= ~1u;
      }
    }
    v14 = *((_DWORD *)Partition + 1734);
    if( v14 )
    {
      v15 = (char *)Partition + 6944;
      v16 = v14;
      do
      {
        v17 = *(_QWORD *)v15;
        if( (*(_BYTE *)(*(_QWORD *)v15 + 204i64) & 0x40) == 0 )
        {
          v18 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(v17 + 232));
          if( *(_DWORD *)(v17 + 132) != *(_DWORD *)(v17 + 128) )
            *(_DWORD *)(v17 + 124) = dword_140CFA18C;
          *(_DWORD *)(v17 + 136) = 4 * dword_140CFA18C;
          if( v13 )
          {
            v26 = *(_BYTE *)(v17 + 207);
            if( (v26 & 1) != 0 )
              *(_BYTE *)(v17 + 207) = v26 & 0xFE;
          }
          ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v17 + 232));
          __writecr8(v18);
        }
        v15 += 8;
        --v16;
      }
      while( v16 );
    }
    if( v13 )
      MiUpdateReserveClusterInfo((INT64)Partition, 0i64, 0);
  }
  if( *((_DWORD *)Partition + 290) )
    MiStoreUpdateMemoryConditions(Partition);
}

Referenced by:

MiWorkingSetManager