MiFlushAllHintedStorePages

NTSTATUS __stdcall MiFlushAllHintedStorePages(){
  _ETHREAD *CurrentThread; 
  NTSTATUS v1; 
  unsigned int v2; 
  __int64 v3; 
  __int64 v4; 
  INT64 v5; 
  INT64 v6; 
  INT64 v8; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v1 = 0;
  if( !*(&stru_140C50B28 + 264) )
    return 1;
  --CurrentThread->Tcb.SpecialApcDisable;
  v2 = KeSetActualBasePriorityThread(&CurrentThread->Tcb, 18i64);
  v3 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
  _InterlockedExchangeAdd((_DWORD *)&stru_140C50B28 + 262, 2u);
  v4 = *(&stru_140C50B28 + 263);
  while( Irp.PageLists.ModifiedPageListByReservation[v4].Total )
  {
    if( MiCanFlushMakeProgress(&Irp, 1ui64) )
    {
      MiWakeModifiedPageWriter(&Irp, 0xFFFFFFFFFFFFFFFFui64, v5, v6, v8);
      MiStoreUpdateMemoryConditions(&Irp);
      KeDelayExecutionThread(0, 0, (_LARGE_INTEGER *)&Mi30Milliseconds);
      if( (unsigned __int64)(*(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - v3) <= 0x2FAF080 )
        continue;
    }
    goto LABEL_8;
  }
  v1 = 1;
LABEL_8:
  _InterlockedOr((_DWORD *)&stru_140C50B28 + 262, 1u);
  _InterlockedExchangeAdd((_DWORD *)&stru_140C50B28 + 262, 0xFFFFFFFE);
  KeSetEvent((PRKEVENT)((char *)&stru_140C50B28 + 776), 0, 0);
  KeSetActualBasePriorityThread(&CurrentThread->Tcb, v2);
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  return v1;
}

Referenced by:

MmStoreFlushAllHintedPages