IopDeleteIoCompletionInternal

VOID __stdcall IopDeleteIoCompletionInternal(VOID *Object, UINT8 Close){
  UINT8 v4; 
  _LIST_ENTRY *v5; 
  _LIST_ENTRY *v6; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *v8; 
  _LIST_ENTRY *v9; 
  _LIST_ENTRY *Blink; 
  VOID *WaitCompletionPacket[2]; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  *(_OWORD *)WaitCompletionPacket = 0i64;
  memset(&LockHandle, 0, sizeof(LockHandle));
  if( Close )
  {
    KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)Object + 8, &LockHandle);
    v4 = 0;
    *((_BYTE *)Object + 72) = 1;
  }
  else
  {
    v4 = 1;
  }
  v5 = KeRundownQueueEx((_KQUEUE *)Object, v4);
  v6 = v5;
  if( v5 )
  {
    Flink = v5->Flink;
    if( Flink->Blink == v6 )
    {
      WaitCompletionPacket[0] = Flink;
      WaitCompletionPacket[1] = v6;
      Flink->Blink = (_LIST_ENTRY *)WaitCompletionPacket;
      v6->Flink = (_LIST_ENTRY *)WaitCompletionPacket;
      v6 = (_LIST_ENTRY *)WaitCompletionPacket[0];
      if( WaitCompletionPacket[0] != WaitCompletionPacket )
      {
        do
        {
          v8 = v6;
          v6 = v6->Flink;
          if( LOBYTE(v8[1].Flink) == 2 )
          {
            Blink = v8->Blink;
            if( v6->Blink != v8 || Blink->Flink != v8 )
              goto LABEL_23;
            Blink->Flink = v6;
            v6->Blink = Blink;
            IopFreeWaitCompletionPacket(v8, Object);
          }
        }
        while( v6 != (_LIST_ENTRY *)WaitCompletionPacket );
        v6 = (_LIST_ENTRY *)WaitCompletionPacket[0];
      }
      if( v6 == (_LIST_ENTRY *)WaitCompletionPacket )
      {
        v6 = 0i64;
        goto LABEL_4;
      }
      v9 = (_LIST_ENTRY *)WaitCompletionPacket[1];
      if( (VOID **)v6->Blink == WaitCompletionPacket && *(VOID ***)WaitCompletionPacket[1] == WaitCompletionPacket )
      {
        *(_QWORD *)WaitCompletionPacket[1] = v6;
        v6->Blink = v9;
        WaitCompletionPacket[1] = WaitCompletionPacket;
        WaitCompletionPacket[0] = WaitCompletionPacket;
        goto LABEL_4;
      }
    }
LABEL_23:
    __fastfail(3u);
  }
LABEL_4:
  if( Close )
  {
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
  }
  if( v6 )
  {
    v6->Blink->Flink = 0i64;
    IopFreeCompletionListPackets((_SLIST_ENTRY *)v6);
  }
}

Referenced by:

IopCloseIoCompletion
IopDeleteIoCompletion