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