KeSetTimer2

UINT8 __stdcall KeSetTimer2(_KTIMER2 *Timer, INT64 DueTime, INT64 Period, _EXT_SET_PARAMETERS_V0 *Parameters){
  __int64 v5; 
  INT64 v6; 
  unsigned __int8 TypeFlags; 
  unsigned __int8 v9; 
  unsigned __int64 v10; 
  UINT64 v11; 
  unsigned __int64 v12; 
  __int64 NoWakeTolerance; 
  UINT8 v14; 
  int v15; 
  CHAR v16; 
  char v17; 
  unsigned __int8 Signalling; 
  bool v19; 
  unsigned __int8 v20; 
  int LockNV; 
  signed __int32 v22; 
  CHAR v23; 
  INT64 v24; 
  INT64 SystemTimePrecise; 
  INT64 v27; 
  char v28; 
  signed __int32 v29; 
  UINT8 WasLate; 
  __int64 CurrentIrql; 
  INT64 CurrentQpc; 
  CurrentQpc = 0i64;
  v5 = Period;
  v6 = DueTime;
  if( Period && Period < (unsigned int)KeMinimumIncrement )
    v5 = (unsigned int)KeMinimumIncrement;
  TypeFlags = Timer->TypeFlags;
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  v9 = 0;
  if( DueTime > 0 )
  {
    v9 = 1;
    if( (TypeFlags & 4) != 0 )
      SystemTimePrecise = RtlGetSystemTimePrecise();
    else
      SystemTimePrecise = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
    v27 = 0i64;
    if( v6 > SystemTimePrecise )
      v27 = SystemTimePrecise - v6;
    v6 = v27;
  }
  if( (TypeFlags & 4) != 0 )
    LODWORD(v10) = RtlGetInterruptTimePrecise(&CurrentQpc);
  else
    v10 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
  v11 = v10 - v6;
  if( v10 - v6 < v10 || v11 == -1i64 )
    v11 = -2i64;
  v12 = v11;
  if( Parameters && Timer->CollectionIndex[0] != 21 )
  {
    NoWakeTolerance = Parameters->NoWakeTolerance;
    if( NoWakeTolerance == -1 )
    {
      v12 = -1i64;
    }
    else
    {
      v12 = NoWakeTolerance + v11;
      if( NoWakeTolerance + v11 < v11 || v12 == -1i64 )
        v12 = -2i64;
    }
  }
  v14 = 0;
  WasLate = 0;
  v15 = 1;
  if( !KiAcquireTimer2LockUnlessDisabled(Timer) )
  {
    KiAcquireTimer2CollectionLockIfInserted(Timer, v16);
    if( v17 )
    {
      KiRemoveTimer2(Timer);
      KxReleaseSpinLock(&KiTimer2CollectionLock);
      v14 = 1;
    }
    else
    {
      Signalling = Timer->Header.Signalling;
      if( (Signalling & 0xF) != 0 )
      {
        v15 = 8;
        if( (Signalling & 4) == 0 )
          v14 = 1;
      }
    }
    v19 = (KiVelocityFlags & 0x2000) == 0;
    Timer->DueTime[0] = v11;
    Timer->DueTime[1] = v12;
    v20 = Timer->TypeFlags;
    Timer->Header.SignalState = 0;
    Timer->Period = v5;
    Timer->AbsoluteSystemTime = v9;
    if( v19 )
    {
      if( (v20 & 0x10) == 0 )
      {
LABEL_43:
        Timer->TypeFlags = v20 | 0x10;
        KiUpdateTimer2Collections((BYTE *)Timer);
      }
    }
    else if( (v20 & 0xE) == 0 )
    {
      if( !PsTimerResolutionActive(*((_QWORD *)KeGetCurrentThread() + 23)) )
      {
        if( v28 )
        {
          Timer->TypeFlags = v20 & 0xEF;
          KiUpdateTimer2Collections((BYTE *)Timer);
        }
        goto LABEL_17;
      }
      if( !v28 )
        goto LABEL_43;
    }
LABEL_17:
    if( v15 == 1 )
    {
      KxAcquireSpinLock(&KiTimer2CollectionLock);
      KiInsertTimer2WithCollectionLockHeld(Timer, 1u, &WasLate);
    }
    LockNV = Timer->Header.LockNV;
    v22 = _InterlockedCompareExchange(
            &Timer->Header.Lock,
            (v15 << 8) | Timer->Header.LockNV & 0xFFFFF07F,
            Timer->Header.LockNV);
    if( LockNV != v22 )
    {
      do
      {
        v29 = v22;
        v22 = _InterlockedCompareExchange(&Timer->Header.Lock, (v15 << 8) | v22 & 0xFFFFF07F, v22);
      }
      while( v29 != v22 );
    }
    if( v15 == 1 )
      KxReleaseSpinLock(&KiTimer2CollectionLock);
    if( !KeIsForceIdleEngaged() )
    {
      if( WasLate )
      {
        KiRequestTimer2Expiration(v24, v23);
      }
      else if( (TypeFlags & 4) != 0
             && KiShouldActivateHRTimerClock(*(UINT64 *)&KUSER_SHARED_DATA.InterruptTime.LowPart, v11) )
      {
        KiSendClockInterruptToClockOwner();
      }
    }
  }
  __writecr8((unsigned __int8)CurrentIrql);
  return v14;
}

Referenced by:

EtwpCoverageEnsureContext
EtwpCoverageRecord
EtwpEnableKernelTrace
ExInitializeTimeRefresh
ExSetTimer
ExpSetTimerObject2
ExpTimeRefreshWork
ExpWorkQueueManagerThread
HalpBlkInitSystem
KiTriggerForegroundBoostDpc
MiStoreEvictThread
NtCreateWorkerFactory
NtSetInformationWorkerFactory
PopCheckPowerSourceAfterRtcWakeSet
PopDirectedDripsStartDisengageTimer
PopDripsWatchdogScheduleNextTimer
PopIdleArmAoAcDozeS4Timer
PopNetArmDsEvaluationTimer
PopNetArmRefreshTimer
PopPowerAggregatorSessionSwitchWorker
PopPowerButtonWorkCallback
PopSleepstudyStartNextSession
PopThermalUpdateTelemetryClientCount
PopThermalWorker
PpmRegisterPerfStates
SMKM_STORE_MGR::SmHighMemPriorityTimerStart