MiStoreUpdateMemoryConditions

VOID __stdcall MiStoreUpdateMemoryConditions(_MI_PARTITION *Partition){
  volatile unsigned __int64 AvailablePages; 
  NTSTATUS v3; 
  int v4; 
  int v5; 
  unsigned int v6; 
  unsigned __int64 v7; 
  unsigned __int64 TotalPagesForPagingFile; 
  int v9; 
  int v10[8]; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  memset(&LockHandle, 0, sizeof(LockHandle));
  KeAcquireInStackQueuedSpinLock(&Partition->PageLists.AvailableEventsLock, &LockHandle);
  AvailablePages = Partition->Vp.AvailablePages;
  v3 = MiUseLowIoPriorityForModifiedPages(Partition);
  v4 = v3 == 0;
  if( AvailablePages < 0xA0 )
  {
    v9 = 0;
    v6 = 18;
    v5 = 1;
  }
  else
  {
    v5 = 0;
    if( AvailablePages < 0x420 )
    {
      v9 = 1;
      v6 = 18;
    }
    else
    {
      v6 = 8;
      LODWORD(v7) = MiGetAvailablePagesBelowPriority(Partition, 6ui64);
      if( v7 < 3i64 * *((_QWORD *)Partition->WorkingSetControl + 299) )
      {
        v9 = 2;
      }
      else
      {
        TotalPagesForPagingFile = Partition->Vp.TotalPagesForPagingFile;
        if( TotalPagesForPagingFile >= v7 + 0x2000 )
          v9 = (TotalPagesForPagingFile < v7 + 0x2000 + v7) + 2;
        else
          v9 = 4;
      }
    }
  }
  if( KeQueryEffectiveBasePriorityThread(&Partition->Store.EvictionThread->Tcb) != v6 )
    KeSetActualBasePriorityThread(&Partition->Store.EvictionThread->Tcb, v6);
  if( v5 )
    KeSetEvent((PRKEVENT)Partition->Store.gap30, 0, 0);
  if( (unsigned __int8)byte_140D23168 != v9 || !v9 || (unsigned __int8)byte_140D23169 != v4 )
  {
    byte_140D23168 = v9;
    byte_140D23169 = v3 == 0;
    _InterlockedOr(v10, 0);
    SMKM_STORE_MGR::SmUpdateMemoryConditions((_SMKM_STORE_LIST *)SmGlobals, v9, v4);
  }
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
  if( !v9 )
    SMKM_STORE_MGR::SmDrainSList(&stru_140D22F40, 0);
}

Referenced by:

MiAdjustModifiedPageLoad
MiFlushAllHintedStorePages
MiFlushAllPagesWorker
MiModifiedPageWriter