KiRemoveEntryTimer

VOID __fastcall KiRemoveEntryTimer(_KTIMER_TABLE *TimerTable, _KTIMER *Timer, UINT64 Hand){
  volatile signed __int64 **v3; 
  __int64 v4; 
  unsigned int TimerType; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *p_TimerListEntry; 
  unsigned __int64 v9; 
  _LIST_ENTRY *Blink; 
  __int64 v11; 
  volatile signed __int32 *v12; 
  struct _KPRCB *CurrentPrcb; 
  unsigned __int64 v14; 
  unsigned __int64 v15; 
  struct _KPRCB *v16; 
  _DWORD *v17; 
  struct _KPRCB *v18; 
  struct _KPRCB *v19; 
  volatile signed __int32 *v20; 
  _DWORD *SchedulerAssist; 
  int v22; 
  _DWORD *v23; 
  int v24; 
  UINT64 v25; 
  UINT64 v26; 
  UINT64 SpinCount; 
  volatile signed __int64 **v28; 

  v28 = v3;
  v4 = (unsigned int)Hand;
  TimerType = Timer->TimerType;
  Flink = Timer->TimerListEntry.Flink;
  p_TimerListEntry = &Timer->TimerListEntry;
  v9 = 4 * (((unsigned __int64)TimerType << 8) + v4 + 16);
  Blink = p_TimerListEntry->Blink;
  v11 = 4 * (((TimerType ^ 1i64) << 8) + v4 + 16);
  if( Flink->Blink != p_TimerListEntry || Blink->Flink != p_TimerListEntry )
    __fastfail(3u);
  Blink->Flink = Flink;
  Flink->Blink = Blink;
  if( Blink == Flink )
  {
    HIDWORD(TimerTable->TimerExpiry[v9 + 3]) = -1;
    if( (_WORD)TimerType )
    {
      v12 = (volatile signed __int32 *)TimerTable->TimerEntries + 8 * v4;
      CurrentPrcb = KeGetCurrentPrcb();
      if( CurrentPrcb->SchedulerAssist && CurrentPrcb->NestingLevel <= 1u && CurrentPrcb->NestingLevel == 1 )
        v3 = v28;
      if( _interlockedbittestandset64((volatile signed __int32 *)TimerTable->TimerEntries + 8 * v4, 0i64) )
      {
        if( CurrentPrcb->SchedulerAssist && CurrentPrcb->NestingLevel <= 1u && !(_DWORD)Blink )
          v3 = v28;
        _mm_pause();
        v12 = 0i64;
      }
      if( !v12 )
      {
        _InterlockedAnd64(*v3, 0i64);
        v12 = (volatile signed __int32 *)TimerTable->TimerEntries + 8 * v4;
        v18 = KeGetCurrentPrcb();
        LODWORD(v25) = 0;
        while( _interlockedbittestandset64(v12, 0i64) )
        {
          do
            KeYieldProcessorEx(&v25);
          while( *(_QWORD *)v12 );
          SchedulerAssist = v18->SchedulerAssist;
          if( SchedulerAssist && v18->NestingLevel <= 1u )
          {
            v22 = SchedulerAssist[6] + 1;
            SchedulerAssist[6] = v22;
          }
        }
        v19 = KeGetCurrentPrcb();
        v20 = (volatile signed __int32 *)&TimerTable->TimerEntries[1][v4];
        LODWORD(v26) = 0;
        while( _interlockedbittestandset64(v20, 0i64) )
        {
          do
            KeYieldProcessorEx(&v26);
          while( *(_QWORD *)v20 );
          v23 = v19->SchedulerAssist;
          if( v23 && v19->NestingLevel <= 1u )
          {
            v24 = v23[6] + 1;
            v23[6] = v24;
          }
        }
        *v28 = (volatile signed __int64 *)v20;
      }
    }
    else
    {
      v16 = KeGetCurrentPrcb();
      v12 = (volatile signed __int32 *)&TimerTable->TimerEntries[1][v4];
      LODWORD(SpinCount) = 0;
      while( _interlockedbittestandset64(v12, 0i64) )
      {
        do
          KeYieldProcessorEx(&SpinCount);
        while( *(_QWORD *)v12 );
        v17 = v16->SchedulerAssist;
        if( v17 && v16->NestingLevel <= 1u )
          ++v17[6];
      }
    }
    if( HIDWORD(TimerTable->TimerExpiry[v9 + 3]) == -1 && HIDWORD(TimerTable->TimerExpiry[v11 + 3]) == -1 )
    {
      if( KiSerializeTimerExpiration )
      {
        v14 = v4 & 0x3F;
        v15 = 8i64 * ((unsigned int)v4 >> 6);
      }
      else
      {
        v14 = BYTE1(TimerTable[-1].TimerEntries[0][61].Entry.Flink);
        v15 = (unsigned __int64)(unsigned int)v4 << 6;
      }
      _interlockedbittestandreset64(
        (volatile signed __int32 *)(qword_140CFC7A8[2 * LOBYTE(TimerTable[-1].TimerEntries[0][61].Entry.Flink)] + v15),
        v14);
    }
    _InterlockedAnd64((volatile signed __int64 *)v12, 0i64);
  }
}

Referenced by:

ExpSetTimerObject
KiAdjustTimerDueTimes
KiExpireTimerTable
KiInsertTimerTable
KiRetireDpcList