KeRundownApcQueues
_LIST_ENTRY *__fastcall KeRundownApcQueues(__int64 a1){
_LIST_ENTRY *v2;
_LIST_ENTRY *v3;
_LIST_ENTRY *result;
_LIST_ENTRY *v5;
_LIST_ENTRY *v6;
void(*Blink)(void);
unsigned __int8 CurrentIrql;
--*(_WORD *)(a1 + 484);
*(_DWORD *)(a1 + 116) &= ~0x4000u;
KiAcquireReleaseThreadLock((_KTHREAD *)a1);
KeForceResumeThread((_KTHREAD *)a1);
KeLeaveCriticalRegionThread(a1);
v2 = KiFlushQueueApc((_KTHREAD *)a1, 1);
v3 = v2;
if( v2 )
{
v5 = v2;
do
{
v6 = v5 - 1;
v5 = v5->Flink;
Blink = (void(*)(void))v6[2].Blink;
if( Blink )
Blink();
else
ExFreePoolWithTag(v6, 0);
}
while( v5 != v3 );
}
result = KiFlushQueueApc((_KTHREAD *)a1, 0);
if( result || *(_DWORD *)(a1 + 484) )
{
CurrentIrql = KeGetCurrentIrql();
KeBugCheckEx(0x20u, (ULONG_PTR)result, *(unsigned int *)(a1 + 484), CurrentIrql, 0i64);
}
return result;
}Referenced by:
PspExitThread
sub_1405BC6E0