refactor(windows): trim the inert IOCTL channel from the DualSense driver

The host<->driver channel is the shared-memory section (hidclass blocks the device
stack and UMDF has no control device), so the first-attempt in-driver IOCTL channel
never fired. Remove it: the custom device interface, IOCTL_PFDS_SET_INPUT/GET_OUTPUT,
the output queue, and the on_set_input/complete_one_read/deliver_output helpers. The
driver keeps the HID handshake, the 8ms read timer fed from the shared section, and
on_output_report publishing the game's 0x02 to the section. Rebuilt + reloaded + the
channel still verifies both directions live on the RTX box.

Also list `pf_dualsense` as a second hardware id (alongside `root\pf_dualsense`) so the
host's SwDeviceCreate'd software device binds the same driver as a devgen one.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-21 21:34:00 +00:00
parent 4a73102d48
commit 01dc0b616c
2 changed files with 35 additions and 193 deletions
@@ -25,7 +25,10 @@ pf_dualsense.dll=1
%ManufacturerString%=pf, NT$ARCH$.10.0...22000
[pf.NT$ARCH$.10.0...22000]
%DeviceDesc%=pfDualSense, root\pf_dualsense
; Two hardware ids: `root\pf_dualsense` for a root-enumerated devnode (devgen/devcon tests) and
; `pf_dualsense` for the host's SwDeviceCreate'd software device (the `root\` prefix is reserved for
; root enumeration, so SwDeviceCreate rejects it with E_INVALIDARG).
%DeviceDesc%=pfDualSense, root\pf_dualsense, pf_dualsense
[pfDualSense.NT]
CopyFiles=UMDriverCopy