MiFlushAllPagesWorker

VOID __fastcall MiFlushAllPagesWorker(_MI_PARTITION *Partition, INT64 a2, UINT64 a3, INT64 a4){
  _ETHREAD *CurrentThread; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  _InterlockedIncrement((volatile signed __int32 *)Partition + 196);
  _InterlockedIncrement((volatile signed __int32 *)Partition + 197);
  do
  {
    if( !(unsigned int)MiCanFlushMakeProgress(Partition, 0i64) || a4 && *(_DWORD *)(a4 + 4) )
      break;
    KeSetEvent((PRKEVENT)Partition + 33, 0);
    MiWakeModifiedPageWriter(Partition, 0xFFFFFFFFFFFFFFFFui64);
    CcNotifyWriteBehindEx(2, *((_QWORD *)Partition + 22));
    if( *((_DWORD *)Partition + 290) )
      MiStoreUpdateMemoryConditions(Partition);
    KeDelayExecutionThread(0, 0, (PLARGE_INTEGER)&Mi30Milliseconds);
    if( KiQueryUnbiasedInterruptTime(1u) - a2 > a3 )
      break;
  }
  while( *((_QWORD *)Partition + 936) > 0x32ui64 );
  _InterlockedAdd((volatile signed __int32 *)Partition + 196, 0xFFFFFFFF);
  _InterlockedAdd((volatile signed __int32 *)Partition + 197, 0xFFFFFFFF);
  KeLeaveCriticalRegionThread((__int64)CurrentThread);
}

Referenced by:

MiFlushAllPages