KiAttemptFastRemoveQueue
_KQUEUE *__fastcall KiAttemptFastRemoveQueue(_KQUEUE *Queue, _LIST_ENTRY **EntryArray, UINT64 Count){
_LIST_ENTRY **v3;
unsigned int v4;
_LIST_ENTRY *v7;
_KQUEUE *result;
_LIST_ENTRY *Flink;
_LIST_ENTRY *Blink;
v3 = (_LIST_ENTRY **)((char *)Queue + 24);
v4 = Count;
v7 = (_LIST_ENTRY *)*((_QWORD *)Queue + 3);
result = 0i64;
do
{
--*((_DWORD *)Queue + 1);
Flink = v7->Flink;
if( !v7->Flink )
KeBugCheckEx(0x96u, v7, Queue, *(&WheapDeferredInternalLogsEventLock + 337), v7[1].Flink);
if( Flink->Blink != v7 || (Blink = v7->Blink, Blink->Flink != v7) )
__fastfail(3u);
Blink->Flink = Flink;
Flink->Blink = Blink;
v7->Flink = 0i64;
EntryArray[(_QWORD)result] = v7;
result = (_KQUEUE *)(unsigned int)((_DWORD)result + 1);
v7 = *v3;
}
while( *v3 != (_LIST_ENTRY *)v3 && (unsigned int)result < v4 );
return result;
}Referenced by:
KeRemoveQueueEx