KiProcessThreadWaitList
CHAR __fastcall KiProcessThreadWaitList(struct KPRCB *a1, CHAR a2, CHAR a3){
__int64 **v3;
__int64 v7;
__int64 v8;
__int64 *v9;
__int64 *v10;
void *v11;
__int64 *v12;
CHAR result;
__int64 **v14;
v3 = (__int64 **)*((_QWORD *)a1 + 1441);
*((_QWORD *)a1 + 1441) = 0i64;
do
{
v7 = *((unsigned __int8 *)v3 + 371);
v8 = (__int64)(v3 - 27);
v9 = *(v3 - 1);
v3 = (__int64 **)*v3;
v10 = &v9[6 * v7];
do
{
if( *((_BYTE *)v9 + 17) < 5u )
{
v11 = (void *)v9[4];
KiAcquireKobjectLockSafe(v11);
if( *((_BYTE *)v9 + 17) == 4 )
{
v12 = (__int64 *)*v9;
if( *(__int64 **)(*v9 + 8) != v9 || (v14 = (__int64 **)v9[1], *v14 != v9) )
__fastfail(3u);
*v14 = v12;
v12[1] = (__int64)v14;
}
_InterlockedAnd((volatile signed __int32 *)v11, 0xFFFFFF7F);
}
v9 += 6;
}
while( v9 != v10 );
*(_BYTE *)(v8 + 566) = a2;
*(_BYTE *)(v8 + 567) = a3;
KiReadyThread((struct _KPRCB *)a1, v8);
}
while( v3 );
return result;
}Referenced by:
KeRemovePriQueue
KeRemoveQueueEx
KeTerminateThread
KiCommitThreadWait
KiExpireTimer2
KiPriQueueThreadPriorityChanged
KiProcessExpiredTimerList
KiSwapThread
KiTimer2Expiration