KiActivateWaiterPriQueue
VOID __stdcall KiActivateWaiterPriQueue(ULONG_PTR Queue, _ETHREAD *Thread){
__int64 v2;
_LIST_ENTRY *v3;
_LIST_ENTRY *v4;
_LIST_ENTRY *v5;
_LIST_ENTRY *Flink;
INT64 WorkPriority;
HIDWORD(WorkPriority) = HIDWORD(Thread);
LODWORD(WorkPriority) = 0;
v2 = *(_QWORD *)&Queue;
if( *(_QWORD *)(*(_QWORD *)&Queue + 8i64) != *(_QWORD *)&Queue + 8i64 )
{
if( *(_DWORD *)(*(_QWORD *)&Queue + 4i64) )
{
v3 = KiAttemptFastRemovePriQueue(*(_KPRIQUEUE **)&Queue, &WorkPriority, 0xFFFFFFFFi64);
v4 = v3;
if( v3 )
{
if( !KiWakePriQueueWaiter(KeGetCurrentPrcb(), (_KPRIQUEUE *)v2, (INT64)v3, (unsigned int)WorkPriority) )
{
++*(_DWORD *)(v2 + 4);
v5 = (_LIST_ENTRY *)(v2 + 16i64 * (int)WorkPriority + 24);
Flink = v5->Flink;
if( v5->Flink->Blink != v5 )
__fastfail(3u);
v4->Flink = Flink;
v4->Blink = v5;
Flink->Blink = v4;
v5->Flink = v4;
}
}
}
}
_InterlockedAnd((volatile signed __int32 *)v2, 0xFFFFFF7F);
}Referenced by:
KiActivateWaiterQueueWithNoLocks
KiCommitThreadWait
KiPriQueueThreadPriorityChanged