KiActivateWaiterQueueWithNoLocks

VOID __stdcall KiActivateWaiterQueueWithNoLocks(
        _ETHREAD *Thread,
        _DISPATCHER_HEADER *Queue,
        _LIST_ENTRY *DisassociateEntry){
  volatile int *v5; 
  _DISPATCHER_HEADER *volatile v6; 
  _ETHREAD *v7; 
  char v8; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *Blink; 
  __int64 QueuePriority; 
  UINT64 SpinCount; 

  v5 = (volatile int *)((char *)&KiObjectRundownLocks + 64 * (((unsigned __int64)Queue >> 4) & 0x3F));
  ExAcquireSpinLockSharedAtDpcLevel(v5);
  v6 = Thread->Tcb.Queue;
  if( v6 )
  {
    KiAcquireKobjectLockSafe(Thread->Tcb.Queue);
    if( !Thread->Tcb.Queue )
    {
      _InterlockedAnd((volatile signed __int32 *)v6, 0xFFFFFF7F);
      v6 = 0i64;
    }
  }
  ExReleaseSpinLockSharedFromDpcLevel(v5);
  if( v6 )
  {
    if( DisassociateEntry )
    {
      v8 = *(_BYTE *)v6 & 0x7F;
      if( v8 == 21 )
      {
        LODWORD(SpinCount) = 0;
        while( _interlockedbittestandset64((volatile signed __int32 *)&Thread->Tcb.ThreadLock, 0i64) )
        {
          do
            KeYieldProcessorEx(&SpinCount);
          while( Thread->Tcb.ThreadLock );
        }
        QueuePriority = (unsigned __int8)Thread->Tcb.QueuePriority;
        Thread->Tcb.QueuePriority = (unsigned __int8)Thread->Tcb.QueuePriority | 0x100;
        _InterlockedDecrement((volatile signed __int32 *)v6 + QueuePriority + 134);
        KiReleaseThreadLockSafe((INT64)Thread);
      }
      else
      {
        _InterlockedDecrement((volatile signed __int32 *)v6 + 10);
      }
      Flink = DisassociateEntry->Flink;
      Blink = DisassociateEntry->Blink;
      if( DisassociateEntry->Flink->Blink != DisassociateEntry || Blink->Flink != DisassociateEntry )
        __fastfail(3u);
      Blink->Flink = Flink;
      Flink->Blink = Blink;
      Thread->Tcb.Queue = 0i64;
    }
    if( (*(_BYTE *)v6 & 0x7F) == 21 )
      KiActivateWaiterPriQueue((ULONG_PTR)v6, v7);
    else
      KiActivateWaiterKQueue((_KQUEUE *)v6);
  }
}

Referenced by:

KeTerminateThread
KiCommitThreadWait
KiPriQueueThreadPriorityChanged
KiSwitchPriQueue