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