The XP flavor of our own virtual joystick (no third-party driver), built with WDK 7.1.0 to x86/subsystem-5.01. Exposes the identical Public.h contract as the modern KMDF+VHF driver — same GUID, IOCTL_RIO_SUBMIT_REPORT, 25-byte report, VID/PID — so HidFeederJoystickSink drives both. Design (driver/RioGamepadXP/rioxp.c): - WDM HID minidriver via HidRegisterMinidriver presenting the 6-axis/hat/ 96-button joystick. POLLED mode (DevicesArePolled=TRUE): hidclass paces IOCTL_HID_READ_REPORT and we complete each synchronously from a cached report — no pending-IRP or cancel-routine machinery (the usual crash surface in a virtual HID driver). - Named sideband control device (\Device\RioGamepadXP + \DosDevices symlink) takes IOCTL_RIO_SUBMIT_REPORT and updates the cache under a spinlock. - hidclass overwrites our CREATE/CLOSE/DEVICE_CONTROL during registration; we save its pointers and reinstall wrappers that route the control device's IRPs to us and forward the HID FDO's to hidclass. Packaging/install: - Root-enumerated, so install uses devcon (built from the same WDK) — InstallHinfSection can't create the devnode. install-core.bat runs "devcon install RioGamepadXP.inf root\RioGamepadXP"; unsigned is fine (XP x86 enforces no kernel signing). Bundled into vendor\xp\. - net40 feeder opens the driver by name (\.\RioGamepadXP); XP can't put a device interface on a bare control device (no PDO) — the one nuance. Static build only: compiles clean but runtime bring-up (joy.cpl enumeration, report flow) needs a real XP target — that's 8E. 275 tests still green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
54 lines
1.4 KiB
INI
54 lines
1.4 KiB
INI
;
|
|
; RioGamepadXP.inf — RIOJoy virtual HID gamepad for Windows XP (WDM HID
|
|
; minidriver, root-enumerated). No catalog / signing: 32-bit XP does not
|
|
; enforce kernel-mode driver signing, so this installs unsigned.
|
|
;
|
|
; Install (see deploy\install-core.bat):
|
|
; devcon.exe install RioGamepadXP.inf root\RioGamepadXP
|
|
;
|
|
|
|
[Version]
|
|
Signature = "$WINDOWS NT$"
|
|
Class = HIDClass
|
|
ClassGuid = {745a17a0-74d3-11d0-b6fe-00a0c90f57da}
|
|
Provider = %ManufacturerName%
|
|
DriverVer = 07/11/2026,1.0.0.0
|
|
|
|
[DestinationDirs]
|
|
DefaultDestDir = 12 ; %SystemRoot%\System32\drivers
|
|
RioGamepadXP_CopyFiles = 12
|
|
|
|
[SourceDisksNames]
|
|
1 = %DiskName%
|
|
|
|
[SourceDisksFiles]
|
|
RioGamepadXP.sys = 1
|
|
|
|
[Manufacturer]
|
|
%ManufacturerName% = Standard, NTx86
|
|
|
|
[Standard.NTx86]
|
|
%DeviceName% = RioGamepadXP_Device, root\RioGamepadXP
|
|
|
|
[RioGamepadXP_Device.NT]
|
|
CopyFiles = RioGamepadXP_CopyFiles
|
|
|
|
[RioGamepadXP_CopyFiles]
|
|
RioGamepadXP.sys
|
|
|
|
[RioGamepadXP_Device.NT.Services]
|
|
AddService = RioGamepadXP, 0x00000002, RioGamepadXP_Service
|
|
|
|
[RioGamepadXP_Service]
|
|
DisplayName = %ServiceName%
|
|
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
|
|
StartType = 3 ; SERVICE_DEMAND_START
|
|
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
|
|
ServiceBinary = %12%\RioGamepadXP.sys
|
|
|
|
[Strings]
|
|
ManufacturerName = "VWE"
|
|
DiskName = "RioGamepadXP Installation Disk"
|
|
DeviceName = "RIOJoy Virtual Gamepad (XP)"
|
|
ServiceName = "RIOJoy Virtual Gamepad Service (XP)"
|