KeEnumerateQueueApc
__int64 __fastcall KeEnumerateQueueApc(__int64 a1, __int64 a2, __int64 a3, char *a4){
char v6;
char v7;
unsigned __int8 CurrentIrql;
void(__fastcall *v9)(_QWORD *, __int64, __int64);
_QWORD **v10;
_QWORD *i;
__int64 result;
UINT64 SpinCount;
void(__fastcall *v14)(_QWORD *, __int64, __int64);
v14 = (void(__fastcall *)(_QWORD *, __int64, __int64))a2;
if( a4 )
{
v6 = *a4;
v7 = *a4;
}
else
{
v6 = 0;
v7 = 1;
}
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)(a1 + 64), 0i64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( *(_QWORD *)(a1 + 64) );
}
v9 = v14;
do
{
v10 = (_QWORD **)(16i64 * v6 + a1 + 152);
for( i = *v10; i != v10; i = (_QWORD *)*i )
v9(i - 2, 88i64, a3);
++v6;
}
while( v6 <= v7 );
KiReleaseThreadLockSafe(a1);
result = CurrentIrql;
__writecr8(CurrentIrql);
return result;
}Referenced by:
DbgkpLkmdSnapThread