KiAttemptFastRemovePriQueue
_LIST_ENTRY *__stdcall KiAttemptFastRemovePriQueue(_KPRIQUEUE *Queue, INT64 *WorkPriority, INT64 PriorityBias){
unsigned int v3;
__int64 v4;
int v5;
volatile int *CurrentCount;
_LIST_ENTRY *Flink;
unsigned int *p_MaximumCount;
__int64 v9;
int v11;
unsigned int v12;
_LIST_ENTRY *v13;
_LIST_ENTRY *Blink;
v3 = 0;
v4 = (int)PriorityBias;
v5 = 32;
CurrentCount = Queue->CurrentCount;
Flink = 0i64;
p_MaximumCount = &Queue->MaximumCount;
v9 = 32i64;
do
{
v11 = *--p_MaximumCount;
v12 = v3 + v11;
--v5;
--v9;
CurrentCount -= 4;
v3 = v12 - 1;
if( v9 != v4 )
v3 = v12;
if( v3 >= Queue->MaximumCount )
break;
if( *(volatile int **)CurrentCount != CurrentCount )
{
Flink = Queue->EntryListHead[v5].Flink;
if( !Flink->Flink )
KeBugCheckEx(0x96u, (ULONG_PTR)Flink, (ULONG_PTR)Queue, ExWorkerQueue, (ULONG_PTR)Flink[1].Flink);
--Queue->Header.SignalState;
v13 = Flink->Flink;
if( Flink->Flink->Blink != Flink || (Blink = Flink->Blink, Blink->Flink != Flink) )
__fastfail(3u);
Blink->Flink = v13;
v13->Blink = Blink;
Flink->Flink = 0i64;
*(_DWORD *)WorkPriority = v5;
return Flink;
}
}
while( v9 > 0 );
return Flink;
}Referenced by:
KeRemovePriQueue
KiActivateWaiterPriQueue