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