LizardByte / LizardByte/libvirtualhid

Windows: Xbox Series Share button is unavailable through Steam's VHF/XInput path

Offen
#106 0 Kommentare 0 Reaktionen 1 zugewiesene Person Auf GitHub ansehen

@LizardByte-bot arbeitet bereits daran.

Seit 26.8.2026.

Vorherrschende Sprache
C++
Sterne
54
Forks
15
Ø Merge
11 Std. 32 Min.
Gemergte PRs (30 T.)
34

Beschreibung

## Environment

- Host OS: Windows
- Backend: libvirtualhid UMDF/VHF driver
- Virtual profile: Xbox Series (`VID_045E&PID_0B12`, release `0x0509`)
- Affected consumer: Steam controller input

## Observed behavior

The public Xbox Series profile retains `VID_045E&PID_0B12`. At device creation,
the Windows transport applies the captured `0x0509` release and
`VID_045E&PID_0B12&IG_00` XInputHID match ID observed from physical Xbox Series
USB and Xbox Wireless Adapter connections.

The VHF child preserves the native 17-byte GIP-shaped input report, including
Share/Misc as button bit 12, and the native eight-byte four-motor output
payload. Raw HID/browser testers can see the virtual HID device, but Steam's
controller tester does not expose the Share button.

Physical Xbox Series controllers connected through USB, Bluetooth, or the Xbox
Wireless Adapter enter Steam's Xbox HIDAPI path and map Share as `misc1:b11`.
The Windows VHF-created controller instead follows the XInput path. XInput
exposes the standard Xbox button set but has no Share/Misc button.

SDL's Xbox HIDAPI driver also rejects the Windows `\\?\HID#` fake endpoints
used for XGIP controllers. Changing only the VHF HID descriptor therefore
cannot make Steam select the same path used by a physical Xbox Series
controller.

This is a Windows host transport/consumer-path limitation, not a Moonlight
client forwarding limitation.

## Proposed direction

1. Add a separate Windows Xbox transport that is not a VHF HID child and can be
accepted by Steam's Xbox HIDAPI/GIP path.
2. Model it on captured physical Xbox Series USB, Bluetooth, and Xbox Wireless
Adapter device trees, including parent transport identity, interface class,
compatible IDs, initialization behavior, and output routing.
3. Retain the current VHF Xbox Series path as the user-mode compatibility path
until the alternative transport is implemented and validated.

## Acceptance criteria

- Steam maps the virtual Share button as `misc1:b11`.
- Steam's controller tester detects Share.
- Standard buttons, sticks, analog triggers, D-pad, Guide, basic rumble, and
trigger rumble continue to work.
- Validation includes Steam controller logs and the Steam controller tester,
not only descriptor or raw-HID inspection.

## Non-goals

- Do not add a custom kernel-mode driver to the normal C++ library.
- Do not continue descriptor-only VHF remaps as a solution for Steam Share
support.
- Do not expose this Windows-specific transport limitation through the public,
platform-neutral C++ API.

The investigation originated in
[PR #54](https://github.com/LizardByte/libvirtualhid/pull/54).

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.