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