;/*++ ; punktfunk virtual PlayStation/Valve pads — UMDF2 HID minidriver INF (M0 spike). ; One package, four hardware ids: DualSense, DualShock 4, DualSense Edge, Steam Deck. ; Adapted from the WDK vhidmini2 UMDF2 sample (VhidminiUm.inx). ; Depends on MsHidUmdf.inf (build >= 22000). ; Install: devgen /add /hardwareid "root\pf_dualsense" (after pnputil /add-driver /install) ;--*/ [Version] Signature="$WINDOWS NT$" Class=HIDClass ClassGuid={745a17a0-74d3-11d0-b6fe-00a0c90f57da} Provider=%ProviderString% CatalogFile=pf_dualsense.cat PnpLockdown=1 [DestinationDirs] DefaultDestDir = 13 [SourceDisksNames] 1=%Disk_Description%,,, [SourceDisksFiles] pf_dualsense.dll=1 [Manufacturer] %ManufacturerString%=pf, NT$ARCH$.10.0...22000 [pf.NT$ARCH$.10.0...22000] ; Hardware ids: `root\pf_dualsense` for a root-enumerated devnode (devgen/devcon tests); `pf_dualsense` ; for the host's SwDeviceCreate'd DualSense (the `root\` prefix is reserved for root enumeration, so ; SwDeviceCreate rejects it with E_INVALIDARG); `pf_dualshock4` / `pf_dualsenseedge` / `pf_steamdeck` ; for the host's other virtual pads — ONE driver binds all of them (every model line below installs ; the same `pfDualSense` section) and serves the matching HID identity per the device_type byte the ; host stamps into shared memory. ; ; Each id carries its OWN description: Device Manager reads this string, and a single shared ; "Virtual DualSense" made an emulated DualShock 4 look like the controller-type setting had been ; ignored. The HID layer (VID/PID, report descriptor, product string) was always per-type; this ; makes the human-readable name agree with it. %DeviceDesc%=pfDualSense, root\pf_dualsense, pf_dualsense %DeviceDescDS4%=pfDualSense, pf_dualshock4 %DeviceDescEdge%=pfDualSense, pf_dualsenseedge %DeviceDescDeck%=pfDualSense, pf_steamdeck [pfDualSense.NT] CopyFiles=UMDriverCopy Include=MsHidUmdf.inf Needs=MsHidUmdf.NT Include=WUDFRD.inf Needs=WUDFRD_LowerFilter.NT [pfDualSense.NT.hw] Include=MsHidUmdf.inf Needs=MsHidUmdf.NT.hw Include=WUDFRD.inf Needs=WUDFRD_LowerFilter.NT.hw [pfDualSense.NT.Services] Include=MsHidUmdf.inf Needs=MsHidUmdf.NT.Services Include=WUDFRD.inf Needs=WUDFRD_LowerFilter.NT.Services [pfDualSense.NT.Filters] Include=WUDFRD.inf Needs=WUDFRD_LowerFilter.NT.Filters [pfDualSense.NT.Wdf] UmdfService="pf_dualsense", pf_dualsense_Install UmdfServiceOrder=pf_dualsense UmdfKernelModeClientPolicy=AllowKernelModeClients UmdfFileObjectPolicy=AllowNullAndUnknownFileObjects UmdfMethodNeitherAction=Copy UmdfFsContextUsePolicy=CanUseFsContext2 ; Each pad gets its OWN WUDFHost so the driver's per-pad statics (incl. the shm index) don't collide ; across multiple simultaneous controllers (multi-pad). UmdfHostProcessSharing=ProcessSharingDisabled [pf_dualsense_Install] UmdfLibraryVersion=$UMDFVERSION$ ServiceBinary="%13%\pf_dualsense.dll" [UMDriverCopy] pf_dualsense.dll [Strings] ProviderString ="punktfunk" ManufacturerString ="punktfunk" ClassName ="HID device" Disk_Description ="punktfunk DualSense Installation Disk" ; One per hardware id — these are what Device Manager shows. Keep them aligned with the product ; strings the driver serves per device_type (src/lib.rs `on_get_string`). DeviceDesc ="punktfunk Virtual DualSense" DeviceDescDS4 ="punktfunk Virtual DualShock 4" DeviceDescEdge ="punktfunk Virtual DualSense Edge" DeviceDescDeck ="punktfunk Virtual Steam Deck Controller"