KiFlushQueueApc

_LIST_ENTRY *__stdcall KiFlushQueueApc(_ETHREAD *Thread, CHAR ApcMode){
  __int64 v2; 
  unsigned __int8 CurrentIrql; 
  char *v6; 
  _LIST_ENTRY *v7; 
  _LIST_ENTRY *v8; 
  _LIST_ENTRY *v9; 
  UINT64 SpinCount; 
  UINT64 v11; 
  v2 = ApcMode;
  if( ApcMode == 1 )
  {
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    LODWORD(SpinCount) = 0;
    while( _interlockedbittestandset64((volatile signed __int32 *)Thread + 16, 0i64) )
    {
      do
        KeYieldProcessorEx(&SpinCount);
      while( *((_QWORD *)Thread + 8) );
    }
    if( *((_ETHREAD **)Thread + 21) == (_ETHREAD *)((char *)Thread + 168) )
    {
      KiReleaseThreadLockSafe((INT64)Thread);
      __writecr8(CurrentIrql);
      return 0i64;
    }
  }
  else
  {
    if( *((_ETHREAD **)Thread + 2 * ApcMode + 19) == (_ETHREAD *)((char *)Thread + 16 * ApcMode + 152) )
      return 0i64;
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    LODWORD(v11) = 0;
    while( _interlockedbittestandset64((volatile signed __int32 *)Thread + 16, 0i64) )
    {
      do
        KeYieldProcessorEx(&v11);
      while( *((_QWORD *)Thread + 8) );
    }
  }
  v6 = (char *)Thread + 16 * v2 + 152;
  v7 = *(_LIST_ENTRY **)v6;
  if( *(char **)v6 == v6 )
  {
    v7 = 0i64;
  }
  else
  {
    v8 = (_LIST_ENTRY *)*((_QWORD *)v6 + 1);
    if( (char *)v7->Blink != v6 || (char *)v8->Flink != v6 )
      __fastfail(3u);
    v8->Flink = v7;
    v7->Blink = v8;
    v9 = v7;
    do
    {
      BYTE2(v9[4].Flink) = 0;
      v9 = v9->Flink;
    }
    while( v9 != v7 );
    *((_QWORD *)v6 + 1) = v6;
    *(_QWORD *)v6 = v6;
  }
  KiReleaseThreadLockSafe((INT64)Thread);
  __writecr8(CurrentIrql);
  return v7;
}

Referenced by:

KeRundownApcQueues