ExpCancelTimer

INT64 __fastcall ExpCancelTimer(KTIMER *Timer){
  unsigned int v1; 
  unsigned __int8 CurrentIrql; 
  INT64 result; 
  __int64 v5; 
  __int64 v6; 
  KTIMER **v7; 
  v1 = 0;
  if( (*((_BYTE *)Timer + 304) & 1) != 0 )
  {
    v5 = *((_QWORD *)Timer + 10);
    KxAcquireSpinLock((UINT64 *)(v5 + 1120));
    v6 = *((_QWORD *)Timer + 28);
    v7 = (KTIMER **)*((_QWORD *)Timer + 29);
    if( *(KTIMER **)(v6 + 8) != (KTIMER *)((char *)Timer + 224) || *v7 != (KTIMER *)((char *)Timer + 224) )
      __fastfail(3u);
    *v7 = (KTIMER *)v6;
    *(_QWORD *)(v6 + 8) = v7;
    KxReleaseSpinLock((UINT64 *)(v5 + 1120));
    *((_BYTE *)Timer + 304) &= ~1u;
    if( (*((_BYTE *)Timer + 304) & 2) != 0 && *((_BYTE *)Timer + 248)
      || KeCancelTimer(Timer)
      || KeRemoveQueueDpcEx((_KDPC *)((char *)Timer + 160), 0) )
    {
      v1 = 1;
    }
    if( KeRemoveQueueApc((_KAPC *)((char *)Timer + 72)) )
      ++v1;
  }
  else
  {
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    KiCancelTimer(Timer, 1u);
    __writecr8(CurrentIrql);
  }
  result = v1;
  *((_BYTE *)Timer + 248) = 0;
  return result;
}

Referenced by:

ExTimerRundown
NtCancelTimer