KiProcessThreadWaitList

VOID __stdcall KiProcessThreadWaitList(_KPRCB *Prcb, _ADJUST_REASON AdjustReason, INT64 Increment, UINT64 TraceFlags){
  _SINGLE_LIST_ENTRY *Next; 
  char v5; 
  unsigned __int8 v6; 
  __int64 v8; 
  _SINGLE_LIST_ENTRY *v9; 
  _SINGLE_LIST_ENTRY *v10; 
  _SINGLE_LIST_ENTRY *v11; 
  _SINGLE_LIST_ENTRY *v12; 
  _SINGLE_LIST_ENTRY *v13; 
  _SINGLE_LIST_ENTRY *v14; 

  Next = Prcb->DeferredReadyListHead.Next;
  v5 = Increment;
  Prcb->DeferredReadyListHead.Next = 0i64;
  v6 = AdjustReason;
  do
  {
    v8 = BYTE3(Next[46].Next);
    v9 = Next - 27;
    v10 = Next[-1].Next;
    Next = Next->Next;
    v11 = &v10[6 * v8];
    do
    {
      if( BYTE1(v10[2].Next) < 5u )
      {
        v12 = v10[4].Next;
        KiAcquireKobjectLockSafe(v12);
        if( BYTE1(v10[2].Next) == 4 )
        {
          v13 = v10->Next;
          if( v10->Next[1].Next != v10 || (v14 = v10[1].Next, v14->Next != v10) )
            __fastfail(3u);
          v14->Next = v13;
          v13[1].Next = v14;
        }
        _InterlockedAnd((volatile signed __int32 *)v12, 0xFFFFFF7F);
      }
      v10 += 6;
    }
    while( v10 != v11 );
    BYTE6(v9[70].Next) = v6;
    HIBYTE(v9[70].Next) = v5;
    KiReadyThread(Prcb, (_KTHREAD *)v9);
  }
  while( Next );
}

Referenced by:

KeRemovePriQueue
KeRemoveQueueEx
KeTerminateThread
KiCommitThreadWait
KiExpireTimer2
KiPriQueueThreadPriorityChanged
KiProcessExpiredTimerList
KiSwapThread
KiTimer2Expiration