KiCheckWaitNext

UINT8 __stdcall KiCheckWaitNext(
        _ETHREAD *Thread,
        _LARGE_INTEGER *OriginalTimeout,
        UINT8 Precise,
        UINT64 *DueTime,
        _KDUE_TIME_TYPE *TimeoutType){
  unsigned __int8 v6; 
  UINT8 v7; 
  unsigned __int8 CurrentIrql; 
  __int64 v11; 
  UINT64 UnbiasedInterruptTime; 
  _KDUE_TIME_TYPE *v13; 
  INT64 CurrentQpc; 

  v6 = _bittestandreset((signed __int32 *)&Thread->Tcb.116, 2u);
  CurrentQpc = 0i64;
  v7 = v6;
  if( !v6 )
  {
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    Thread->Tcb.WaitIrql = CurrentIrql;
  }
  if( OriginalTimeout )
  {
    if( OriginalTimeout->anonymous_0.HighPart >= 0 )
    {
      *DueTime = OriginalTimeout->QuadPart;
      *TimeoutType = DueTimeAbsolute;
    }
    else
    {
      if( Precise )
      {
        LODWORD(v11) = RtlGetInterruptTimePrecise(&CurrentQpc);
        UnbiasedInterruptTime = v11 - KUSER_SHARED_DATA.InterruptTimeBias;
      }
      else
      {
        UnbiasedInterruptTime = KiQueryUnbiasedInterruptTime(0);
      }
      v13 = TimeoutType;
      *DueTime = UnbiasedInterruptTime - Thread->Tcb.RelativeTimerBias - OriginalTimeout->QuadPart;
      *v13 = DueTimeRelative;
    }
  }
  else
  {
    *TimeoutType = DueTimeNone;
  }
  return v7;
}

Referenced by:

KeDelayExecutionThread
KeWaitForAlertByThreadId
KiWaitForAllObjects