KiFlushQueueApc

_LIST_ENTRY *__stdcall KiFlushQueueApc(_ETHREAD *Thread, INT8 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->Tcb.ThreadLock, 0i64) )
    {
      do
        KeYieldProcessorEx(&SpinCount);
      while( Thread->Tcb.ThreadLock );
    }
    if( (unsigned __int8 *)Thread->Tcb.ApcState.ApcListHead[1].Flink == &Thread->Tcb.ApcStateFill[16] )
    {
      KiReleaseThreadLockSafe((INT64)Thread);
      __writecr8(CurrentIrql);
      return 0i64;
    }
  }
  else
  {
    if( Thread->Tcb.ApcState.ApcListHead[ApcMode].Flink == (_LIST_ENTRY *)((char *)&Thread->Tcb.152 + 16 * ApcMode) )
      return 0i64;
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    LODWORD(v11) = 0;
    while( _interlockedbittestandset64((volatile signed __int32 *)&Thread->Tcb.ThreadLock, 0i64) )
    {
      do
        KeYieldProcessorEx(&v11);
      while( Thread->Tcb.ThreadLock );
    }
  }
  v6 = (char *)&Thread->Tcb.1 + 16 * v2;
  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