KiComputeDueTime

UINT64 __stdcall KiComputeDueTime(_KTIMER *Timer, _LARGE_INTEGER Interval, UINT8 ControlFlags, UINT64 *Hand){
  __int64 v5; 
  LONGLONG v6; 
  int v7; 
  UINT64 result; 
  int v9; 
  v9 = *(_DWORD *)Timer;
  BYTE1(v9) = ControlFlags;
  if( Interval.HighPart >= 0 )
  {
    BYTE1(v9) = ControlFlags | 1;
    Interval.QuadPart = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart - Interval.QuadPart;
    if( Interval.HighPart >= 0 )
    {
      *(_DWORD *)Timer = v9;
      result = 0i64;
      *((_QWORD *)Timer + 3) = 0i64;
      return result;
    }
    ControlFlags |= 1u;
  }
  v5 = 0i64;
  if( (ControlFlags & 0xFC) != 0 )
    v5 = (unsigned __int8)(ControlFlags & 0xFC) << 16;
  v6 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - Interval.QuadPart;
  *((_QWORD *)Timer + 3) = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - Interval.QuadPart;
  HIBYTE(v9) |= 0x40u;
  v7 = (unsigned __int8)((unsigned __int64)(v5 + v6) >> 18);
  BYTE2(v9) = (unsigned __int64)(v5 + v6) >> 18;
  *(_DWORD *)Timer = v9;
  result = 1i64;
  *(_DWORD *)Hand = v7;
  return result;
}

Referenced by:

KeSetTimerEx
KiCommitThreadWait
KiResumeThread
KiSetTimerEx