ExpCancelTimer

UINT64 __stdcall ExpCancelTimer(_ETIMER *Timer){
  unsigned int v1; 
  unsigned __int8 CurrentIrql; 
  UINT64 result; 
  _ETHREAD *Thread; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *Blink; 
  char v8; 

  v1 = 0;
  if( (Timer->CoalescingWindow & 1) != 0 )
  {
    Thread = Timer->TimerApc.Thread;
    KxAcquireSpinLock(&Thread->ActiveTimerListLock);
    Flink = Timer->ActiveTimerListEntry.Flink;
    Blink = Timer->ActiveTimerListEntry.Blink;
    if( Flink->Blink != &Timer->ActiveTimerListEntry || Blink->Flink != &Timer->ActiveTimerListEntry )
      __fastfail(3u);
    Blink->Flink = Flink;
    Flink->Blink = Blink;
    KxReleaseSpinLock(&Thread->ActiveTimerListLock);
    LOBYTE(Timer->CoalescingWindow) &= ~1u;
    if( (Timer->CoalescingWindow & 2) != 0 && LOBYTE(Timer->WakeReason)
      || (unsigned __int8)KeCancelTimer((INT64)Timer)
      || (KeRemoveQueueDpcEx(&Timer->TimerDpc, 0i64), v8) )
    {
      v1 = 1;
    }
    if( KeRemoveQueueApc((INT64)&Timer->TimerApc) )
      ++v1;
  }
  else
  {
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    KiCancelTimer(&Timer->KeTimer, 1u);
    __writecr8(CurrentIrql);
  }
  result = v1;
  LOBYTE(Timer->WakeReason) = 0;
  return result;
}

Referenced by:

ExTimerRundown
NtCancelTimer