KeRundownQueueEx

_LIST_ENTRY *__stdcall KeRundownQueueEx(_KQUEUE *Queue, UINT8 Disassociate){
  UINT8 OldIrql; 
  _QWORD *v5; 
  __int64 v6; 
  _QWORD *v8; 

  OldIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  KiAcquireKobjectLockSafe(Queue);
  v5 = (_QWORD *)((char *)Queue + 24);
  v6 = *((_QWORD *)Queue + 3);
  if( (_KQUEUE *)v6 == (_KQUEUE *)((char *)Queue + 24) )
  {
    v6 = 0i64;
  }
  else
  {
    *((_DWORD *)Queue + 1) = 0;
    v8 = (_QWORD *)*((_QWORD *)Queue + 4);
    if( *(_QWORD **)(v6 + 8) != v5 || (_QWORD *)*v8 != v5 )
      __fastfail(3u);
    *v8 = v6;
    *(_QWORD *)(v6 + 8) = v8;
    *((_QWORD *)Queue + 4) = (char *)Queue + 24;
    *v5 = v5;
  }
  KeRundownQueueCommon((__int64)Queue, (_QWORD **)Queue + 6, (_DWORD *)Queue + 10, 1u, Disassociate);
  _InterlockedAnd((volatile signed __int32 *)Queue, 0xFFFFFF7F);
  if( Disassociate )
    KiAcquireReleaseObjectRundownLockExclusive(Queue);
  KiExitDispatcher(KeGetCurrentPrcb(), 0i64, AdjustUnwait, 0i64, OldIrql);
  return(_LIST_ENTRY *)v6;
}

Referenced by:

EtwpDeleteRegistrationObject
IopDeleteIoCompletionInternal
KeRundownQueue
KeUnInitializeUmsThread