KiSetClockTickRate

UINT64 __stdcall KiSetClockTickRate(UINT64 DesiredIncrement){
  char v1; 
  int v2; 
  char v3; 
  unsigned int v4; 
  int v5; 
  __int64 v6; 
  __int64 *v7; 
  int v8; 
  UINT64 result; 
  __int64 v10; 
  __int64 v11; 
  v2 = KiClockState;
  v10 = 0i64;
  v3 = v1;
  v4 = DesiredIncrement;
  v11 = (unsigned int)DesiredIncrement;
  LODWORD(KiLastRequestedTimeIncrement) = DesiredIncrement;
  if( v1 )
  {
    ((void(__fastcall *)(__int64, _QWORD, __int64 *))off_140C00890[0])(1i64, (unsigned int)DesiredIncrement, &v10);
    v5 = 1;
  }
  else
  {
    ((void(__fastcall *)(_QWORD, _QWORD, __int64 *))off_140C00890[0])(0i64, (unsigned int)DesiredIncrement, &v10);
    v5 = 0;
  }
  KiClockOwnerOneShotRequestState = v5;
  KiSetPendingTick(1u);
  if( v2 == 2 )
    _InterlockedExchange(&KiClockState, 0);
  KiEventClockStateChange();
  KeTimeIncrement = v10;
  v6 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
  KiClockTimerNextTickTime = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart + (unsigned int)v10;
  if( (unsigned int)v10 < dword_140C31374 )
    dword_140C31374 = v10;
  if( (unsigned int)v10 > dword_140C31370 )
    dword_140C31370 = v10;
  if( v4 < dword_140C3137C )
    dword_140C3137C = v4;
  if( v4 > dword_140C31378 )
    dword_140C31378 = v4;
  v7 = &KiClockIncrementTrace[4 * (unsigned int)KiClockIncrementTraceCount];
  KiClockIncrementTraceCount = ((_BYTE)KiClockIncrementTraceCount + 1) & 0xF;
  v8 = KiLastRequestedTimeIncrement;
  *(_DWORD *)v7 = v10;
  *((_DWORD *)v7 + 1) = v8;
  v7[1] = v6;
  v7[2] = KeQueryPerformanceCounter(0i64).QuadPart;
  result = (unsigned int)KeTimeIncrement;
  *((_BYTE *)v7 + 24) = v3;
  return result;
}

Referenced by:

KiSetClockIntervalToMinimumRequested