KiRemoveQueueApc
UINT8 __stdcall KiRemoveQueueApc(_KAPC *Apc){
unsigned __int8 Inserted;
_LIST_ENTRY *p_ApcListEntry;
__int64 ApcMode;
$F25F8C4BA33AF922A5F1AF68CD89DDDF *v5;
_LIST_ENTRY *Flink;
_LIST_ENTRY *Blink;
_LIST_ENTRY *v8;
Inserted = Apc->Inserted;
if( Inserted )
{
p_ApcListEntry = &Apc->ApcListEntry;
ApcMode = Apc->ApcMode;
v5 = &Apc->Thread->Tcb.152;
Apc->Inserted = 0;
Flink = Apc->ApcListEntry.Flink;
Blink = Apc->ApcListEntry.Blink;
if( Flink->Blink != &Apc->ApcListEntry || Blink->Flink != p_ApcListEntry )
__fastfail(3u);
Blink->Flink = Flink;
Flink->Blink = Blink;
if( Blink == Flink )
{
v8 = &v5->ApcState.ApcListHead[ApcMode];
if( p_ApcListEntry->Flink == v8 && Apc->ApcListEntry.Blink == v8 )
{
if( (_BYTE)ApcMode )
v5->ApcState.UserApcPendingAll &= ~2u;
else
v5->ApcState.KernelApcPending = 0;
}
}
}
return Inserted;
}Referenced by:
KeRemoveQueueApc
KiSchedulerApc