KeRemoveByKeyDeviceQueue

NTSTATUS __fastcall KeRemoveByKeyDeviceQueue(INT64 a1, UINT64 a2){
  UINT8 v2; 
  unsigned int v3; 
  __int64 v5; 
  __int64 i; 
  bool v7; 
  __int64 v8; 
  __int64 v9; 
  _QWORD *v10; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  v3 = a2;
  memset(&LockHandle, 0, sizeof(LockHandle));
  LODWORD(v5) = 0;
  KeAcquireInStackQueuedSpinLockForDpc((UINT64 *)(a1 + 24), &LockHandle, v2);
  if( *(_QWORD *)(a1 + 8) == a1 + 8 )
  {
    *(_BYTE *)(a1 + 32) = 0;
  }
  else
  {
    if( *(_DWORD *)(*(_QWORD *)(a1 + 16) + 16i64) >= v3 )
    {
      i = *(__int64 *)(a1 + 32) >> 8;
      if( i )
      {
        v7 = v3 <= *(_DWORD *)((*(__int64 *)(a1 + 32) >> 8) + 0x10);
        if( v3 > *(_DWORD *)((*(__int64 *)(a1 + 32) >> 8) + 0x10) )
          goto LABEL_10;
      }
      for( i = *(_QWORD *)(a1 + 8); ; i = *(_QWORD *)i )
      {
        v7 = v3 <= *(_DWORD *)(i + 16);
LABEL_10:
        v5 = i;
        if( v7 )
          break;
      }
    }
    else
    {
      v5 = *(_QWORD *)(a1 + 8);
    }
    v8 = 0i64;
    if( *(_QWORD *)(v5 + 8) != a1 + 8 )
      v8 = *(_QWORD *)(v5 + 8);
    *(_QWORD *)(a1 + 32) = (unsigned __int8)*(_DWORD *)(a1 + 32) | (unsigned __int64)(v8 << 8);
    v9 = *(_QWORD *)v5;
    if( *(_QWORD *)(*(_QWORD *)v5 + 8i64) != v5 || (v10 = *(_QWORD **)(v5 + 8), *v10 != v5) )
      __fastfail(3u);
    *v10 = v9;
    *(_QWORD *)(v9 + 8) = v10;
    *(_BYTE *)(v5 + 20) = 0;
  }
  KeReleaseInStackQueuedSpinLockForDpc(&LockHandle);
  return v5;
}

Referenced by:

IopStartNextPacketByKey