MiFlushAllHintedStorePages

INT64 __stdcall MiFlushAllHintedStorePages(){
  _ETHREAD *CurrentThread; 
  unsigned int v1; 
  int v2; 
  __int64 v3; 
  __int64 v4; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v1 = 0;
  if( !dword_140C50F48 )
    return 1i64;
  --*((_WORD *)CurrentThread + 243);
  v2 = KeSetActualBasePriorityThread((__int64)CurrentThread, 18);
  v3 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
  _InterlockedExchangeAdd(&dword_140C50F40, 2u);
  v4 = 5i64 * (unsigned int)dword_140C50F44;
  while( *(&MiSystemPartition + v4 + 352) )
  {
    if( (unsigned int)MiCanFlushMakeProgress((_MI_PARTITION *)&MiSystemPartition, 1ui64) )
    {
      MiWakeModifiedPageWriter((_MI_PARTITION *)&MiSystemPartition, 0xFFFFFFFFFFFFFFFFui64);
      MiStoreUpdateMemoryConditions((_MI_PARTITION *)&MiSystemPartition);
      KeDelayExecutionThread(0, 0, (PLARGE_INTEGER)&Mi30Milliseconds);
      if( (unsigned __int64)(*(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - v3) <= 0x2FAF080 )
        continue;
    }
    goto LABEL_8;
  }
  v1 = 1;
LABEL_8:
  _InterlockedOr(&dword_140C50F40, 1u);
  _InterlockedExchangeAdd(&dword_140C50F40, 0xFFFFFFFE);
  KeSetEvent(&stru_140C50E30, 0);
  KeSetActualBasePriorityThread((__int64)CurrentThread, v2);
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  return v1;
}

Referenced by:

MmStoreFlushAllHintedPages