KeEstimateClockTickDuration

VOID __stdcall KeEstimateClockTickDuration(
        _KPRCB *Prcb,
        UINT8 ScanAll,
        UINT8 DeepSleepEnabled,
        UINT64 CurrentTime,
        UINT64 *NextDueTickDuration,
        _KEXPECTED_WAKE_REASON *ExpectedWakeReason){
  unsigned __int64 v6; 
  __int64 v7; 
  UINT64 *NextDueTime; 
  _KEXPECTED_WAKE_REASON v9[2]; 
  _DWORD *v10; 

  *(_QWORD *)v9 = 0i64;
  v6 = KiClockTimerNextTickTime;
  if( Prcb->ClockOwner )
  {
    if( ScanAll )
    {
      if( (_BYTE)KiDynamicTickDisableReason || KiClockState )
        ScanAll = 0;
      if( ScanAll )
      {
        LOBYTE(NextDueTime) = CurrentTime;
        KiGetNextTimerExpirationDueTime(Prcb, 1u, (UINT64)NextDueTickDuration, DeepSleepEnabled, NextDueTime, v9);
        if( (unsigned __int64)NextDueTickDuration + (unsigned int)KiLastRequestedTimeIncrement < *(_QWORD *)v9 )
          v6 = *(_QWORD *)v9;
      }
    }
  }
  else
  {
    LOBYTE(NextDueTime) = CurrentTime;
    KiGetNextTimerExpirationDueTime(Prcb, 0, (UINT64)NextDueTickDuration, DeepSleepEnabled, NextDueTime, v9);
    if( v6 <= *(_QWORD *)v9 )
      v6 = *(_QWORD *)v9;
  }
  v7 = -1i64;
  if( v6 != -1i64 )
  {
    if( v6 <= (unsigned __int64)NextDueTickDuration )
      v7 = 0i64;
    else
      v7 = v6 - (_QWORD)NextDueTickDuration;
  }
  *(_QWORD *)ExpectedWakeReason = v7;
  *v10 = 2;
}

Referenced by:

PpmEstimateIdleDuration