KeEnumerateQueueApc
VOID __stdcall KeEnumerateQueueApc(_ETHREAD *Thread, VOID *Context){
__int64 v2;
char *v3;
__int64 v4;
char v6;
char v7;
unsigned __int8 CurrentIrql;
void(__fastcall *v9)(_LIST_ENTRY *, __int64, __int64);
_LIST_ENTRY *v10;
_LIST_ENTRY *i;
UINT64 SpinCount;
void(__fastcall *v13)(_LIST_ENTRY *, __int64, __int64);
v13 = (void(__fastcall *)(_LIST_ENTRY *, __int64, __int64))Context;
v4 = v2;
if( v3 )
{
v6 = *v3;
v7 = *v3;
}
else
{
v6 = 0;
v7 = 1;
}
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)&Thread->Tcb.ThreadLock, 0i64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( Thread->Tcb.ThreadLock );
}
v9 = v13;
do
{
v10 = &Thread->Tcb.ApcState.ApcListHead[v6];
for( i = v10->Flink; i != v10; i = i->Flink )
v9(i - 1, 88i64, v4);
++v6;
}
while( v6 <= v7 );
KiReleaseThreadLockSafe((INT64)Thread);
__writecr8(CurrentIrql);
}Referenced by:
DbgkpLkmdSnapThread