KiActivateWaiterKQueue
VOID __stdcall KiActivateWaiterKQueue(KQUEUE *Queue){
_LIST_ENTRY *p_EntryListHead;
_LIST_ENTRY *Flink;
_LIST_ENTRY *v4;
_LIST_ENTRY *Blink;
_LIST_ENTRY *v6;
if( Queue->CurrentCount < Queue->MaximumCount )
{
p_EntryListHead = &Queue->EntryListHead;
Flink = Queue->EntryListHead.Flink;
if( Flink != &Queue->EntryListHead && Queue->Header.WaitListHead.Flink != &Queue->Header.WaitListHead )
{
v4 = Flink->Flink;
Blink = Flink->Blink;
if( Flink->Flink->Blink == Flink && Blink->Flink == Flink )
{
Blink->Flink = v4;
v4->Blink = Blink;
Flink->Flink = 0i64;
if( KiWakeQueueWaiter(KeGetCurrentPrcb(), Queue, (INT64)Flink) )
{
--Queue->Header.SignalState;
goto LABEL_3;
}
v6 = p_EntryListHead->Flink;
if( p_EntryListHead->Flink->Blink == p_EntryListHead )
{
Flink->Flink = v6;
Flink->Blink = p_EntryListHead;
v6->Blink = Flink;
p_EntryListHead->Flink = Flink;
goto LABEL_3;
}
}
__fastfail(3u);
}
}
LABEL_3:
_InterlockedAnd(&Queue->Header.Lock, 0xFFFFFF7F);
}Referenced by:
KiActivateWaiterQueueWithNoLocks