85dd2bb077
Headless Windows hosts (no dongle) stream an INVISIBLE cursor: with no pointing device present win32k reports SM_MOUSEPRESENT=0 and DWM never composites a pointer into the pf-vdisplay frame, even though SendInput moves it. Keep ONE virtual HID mouse devnode alive for the host's lifetime — the Sunshine/Parsec-class fix, zero client changes. - pf-mouse: UMDF2 HID minidriver, one fixed identity (PF:MO 5046:4D4F, obviously virtual, nothing fingerprints it), one 8-byte input report (5 buttons + absolute 15-bit X/Y + wheel + AC-pan). Transport is the sealed pad channel verbatim (Global\pfmouse-boot-0 mailbox + unnamed MouseShm DATA section) so pf-umdf-util's audited layer serves it unchanged; report delivery is event-driven (idle = no HID traffic). - host: inject::mouse_windows — VirtualMouse (SwDeviceCreate'd devnode + channel), ensure_resident() keeper thread started by every InjectorService (process-wide, PUNKTFUNK_NO_VIRTUAL_MOUSE opts out), vmouse-spike on-glass validation (cursor sweep via HID reports). - proto: mouse module (magic, boot-name, identity, report layout, unit-tested input_report packing). - SwDeviceProfile grows container_tag so the mouse's ContainerId family (PFMO) never groups with a pad's (PFDS) in the Devices UI. - packaging: pf-mouse rides the gamepad-driver build + install pipeline (build-gamepad-drivers.ps1, windows-drivers.yml, driver install --gamepad picks up every staged .inf). On-glass validated on winbox: devnode + HID child bind, SM_MOUSEPRESENT=1 with no physical mouse, cursor sweeps via HID reports (vmouse-spike). This work was implemented in a parallel session; committed here as the build prerequisite for the HID compose kick that follows. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
80 lines
2.2 KiB
Plaintext
80 lines
2.2 KiB
Plaintext
;/*++
|
|
; punktfunk virtual HID mouse (absolute pointer) — UMDF2 HID minidriver INF.
|
|
; Same skeleton as pf_dualsense.inx (the WDK vhidmini2 UMDF2 shape).
|
|
; Depends on MsHidUmdf.inf (build >= 22000).
|
|
; Install: devgen /add /hardwareid "root\pf_mouse" (after pnputil /add-driver /install)
|
|
;--*/
|
|
[Version]
|
|
Signature="$WINDOWS NT$"
|
|
Class=HIDClass
|
|
ClassGuid={745a17a0-74d3-11d0-b6fe-00a0c90f57da}
|
|
Provider=%ProviderString%
|
|
CatalogFile=pf_mouse.cat
|
|
PnpLockdown=1
|
|
|
|
[DestinationDirs]
|
|
DefaultDestDir = 13
|
|
|
|
[SourceDisksNames]
|
|
1=%Disk_Description%,,,
|
|
|
|
[SourceDisksFiles]
|
|
pf_mouse.dll=1
|
|
|
|
[Manufacturer]
|
|
%ManufacturerString%=pf, NT$ARCH$.10.0...22000
|
|
|
|
[pf.NT$ARCH$.10.0...22000]
|
|
; Hardware ids: `root\pf_mouse` for a root-enumerated devnode (devgen/devcon tests); `pf_mouse` for
|
|
; the host's SwDeviceCreate'd resident pointer (the `root\` prefix is reserved for root enumeration,
|
|
; so SwDeviceCreate rejects it with E_INVALIDARG).
|
|
%DeviceDesc%=pfMouse, root\pf_mouse, pf_mouse
|
|
|
|
[pfMouse.NT]
|
|
CopyFiles=UMDriverCopy
|
|
Include=MsHidUmdf.inf
|
|
Needs=MsHidUmdf.NT
|
|
Include=WUDFRD.inf
|
|
Needs=WUDFRD_LowerFilter.NT
|
|
|
|
[pfMouse.NT.hw]
|
|
Include=MsHidUmdf.inf
|
|
Needs=MsHidUmdf.NT.hw
|
|
Include=WUDFRD.inf
|
|
Needs=WUDFRD_LowerFilter.NT.hw
|
|
|
|
[pfMouse.NT.Services]
|
|
Include=MsHidUmdf.inf
|
|
Needs=MsHidUmdf.NT.Services
|
|
Include=WUDFRD.inf
|
|
Needs=WUDFRD_LowerFilter.NT.Services
|
|
|
|
[pfMouse.NT.Filters]
|
|
Include=WUDFRD.inf
|
|
Needs=WUDFRD_LowerFilter.NT.Filters
|
|
|
|
[pfMouse.NT.Wdf]
|
|
UmdfService="pf_mouse", pf_mouse_Install
|
|
UmdfServiceOrder=pf_mouse
|
|
UmdfKernelModeClientPolicy=AllowKernelModeClients
|
|
UmdfFileObjectPolicy=AllowNullAndUnknownFileObjects
|
|
UmdfMethodNeitherAction=Copy
|
|
UmdfFsContextUsePolicy=CanUseFsContext2
|
|
; Its own WUDFHost so the driver's per-device statics never collide with a gamepad's (parity with
|
|
; the pad INFs — and the resident mouse outlives any session, so isolation is cheap insurance).
|
|
UmdfHostProcessSharing=ProcessSharingDisabled
|
|
|
|
[pf_mouse_Install]
|
|
UmdfLibraryVersion=$UMDFVERSION$
|
|
ServiceBinary="%13%\pf_mouse.dll"
|
|
|
|
[UMDriverCopy]
|
|
pf_mouse.dll
|
|
|
|
[Strings]
|
|
ProviderString ="punktfunk"
|
|
ManufacturerString ="punktfunk"
|
|
ClassName ="HID device"
|
|
Disk_Description ="punktfunk Mouse Installation Disk"
|
|
DeviceDesc ="punktfunk Virtual Mouse"
|