ci / web (push) Successful in 1m5s
windows-drivers / probe-and-proto (push) Successful in 1m5s
deb / build-publish-host (push) Failing after 12s
apple / swift (push) Successful in 1m55s
ci / docs-site (push) Successful in 2m56s
docker / builders (--build-arg FEDORA_VERSION=44, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm, -f44) (push) Successful in 6s
docker / builders (ci/android-ci.Dockerfile, punktfunk-android-ci) (push) Successful in 6s
docker / builders (ci/arch-ci.Dockerfile, punktfunk-arch-ci) (push) Successful in 7s
windows-drivers / driver-build (push) Successful in 2m10s
ci / rust-arm64 (push) Successful in 3m22s
docker / builders (ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 7s
docker / builders (ci/rust-ci-noble.Dockerfile, punktfunk-rust-ci-noble) (push) Successful in 8s
docker / builders (ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 6s
docker / apps (., web/Dockerfile, punktfunk-web) (push) Successful in 11s
docker / apps (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 16s
deb / build-publish-client-arm64 (push) Successful in 2m44s
android / android (push) Canceled after 4m33s
apple / screenshots (push) Canceled after 0s
arch / build-publish (push) Canceled after 4m35s
ci / rust (push) Canceled after 4m40s
deb / build-publish (push) Canceled after 4m40s
docker / builders-arm64cross (push) Canceled after 2s
docker / deploy-docs (push) Canceled after 0s
rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Canceled after 42s
rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Canceled after 39s
windows-host / package (push) Canceled after 1m21s
windows-host / canary-manifest (push) Canceled after 0s
windows-host / winget-source (push) Canceled after 0s
flatpak / build-publish (push) Canceled after 3m45s
release / apple (push) Canceled after 5m40s
windows-msix / package (arm64, C:\Users\Public\ffmpeg-arm64, --no-default-features, aarch64-pc-windows-msvc, C:\t-a64) (push) Canceled after 2m41s
windows-msix / package (x64, C:\Users\Public\ffmpeg, , x86_64-pc-windows-msvc, C:\t) (push) Canceled after 0s
windows / build (aarch64-pc-windows-msvc) (push) Canceled after 0s
windows / build (x86_64-pc-windows-msvc) (push) Canceled after 0s
One signing pass over the 2026-07-30 audit findings: - Timing math unified (D4): monitor-description and target modes now come from ONE IddSampleDriver-exact builder differing only in vSyncFreqDivider; the virtual-display-rs legacy formula (width-less pixel rate, deliberately fractional vSync) is gone. - EDID (D5): the preferred-timing DTD is built from the SESSION's mode when it fits the encoding (pf-driver-proto's tested builder; 1080p60 stays the fallback); the range-limits descriptor covers everything the driver can advertise (max clock 150 MHz → 2550 MHz, max-H +255 — the old limits were violated by the driver's own 1080p120 default); product code 0 → 1. Deliberately still no HDMI VSDB — documented in the module doc. - INF (D6): UmdfFileObjectPolicy=AllowNullAndUnknownFileObjects added (the sibling drivers all carry it); the dead DeviceGroupId (inert under ProcessSharingDisabled) dropped; the IddCx0102-vs- IddMinimumVersionRequired=10 pairing documented as deliberate — 0102 is the extension's registered identity, not a version request. - Watchdog lifecycle (D7): device cleanup now stops the host-liveness thread (it ran forever and its reap raced device teardown over the same monitor list). - Drain path off the mutex (D8): the per-frame has/take_frame_channel checks (≥60 locks/s per worker on the mutex the whole control plane, the mode DDIs and the watchdog contend) are gated by a delivery generation counter — the steady state takes no lock. - Adapter cache (D9): last-write-wins slot instead of a OnceLock, and a D0 re-entry from a REAL low-power state clears + re-inits — the stale pre-power-cycle handle used to wedge every later IOCTL_ADD. - Realtime GPU priority (D10): IddCxSetRealtimeGPUPriority is now A/B-able without a rebuild (PFVD_NO_RT_GPU, machine env) — no canonical IDD driver raises it, and it preempts the game's and DWM's queues at a level apps can't reach. - Logging (D2): the logger rides file_log_enabled() as a whole — a RELEASE driver without the opt-in no longer OutputDebugStringA's (+2 allocs) per logged event. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
94 lines
3.3 KiB
Plaintext
94 lines
3.3 KiB
Plaintext
;/*++
|
|
; pf-vdisplay - punktfunk virtual display, UMDF2 IddCx driver INF (template; stampinf -> .inf).
|
|
;
|
|
; For the all-Rust wdk-sys / windows-drivers-rs driver in THIS tree
|
|
; (packaging/windows/drivers/pf-vdisplay/). The driver registers the OWNED pf_driver_proto
|
|
; control-interface GUID in CODE (WdfDeviceCreateDeviceInterface), so this INF is GUID-agnostic and
|
|
; is byte-identical to the superseded oracle's (packaging/windows/vdisplay-driver/.../pf_vdisplay.inx,
|
|
; itself adapted from MolotovCherry/virtual-display-rs (MIT) + SudoVDA's control-device security DACL).
|
|
; HWID Root\pf_vdisplay + IddCx0102 + the DACL match the host backend (crates/punktfunk-host/src/
|
|
; vdisplay/pf_vdisplay.rs) and install-pf-vdisplay.ps1's Test-PfVdisplayPresent / nefconc node-create.
|
|
;--*/
|
|
[Version]
|
|
PnpLockdown=1
|
|
Signature="$Windows NT$"
|
|
ClassGUID={4D36E968-E325-11CE-BFC1-08002BE10318}
|
|
Class=Display
|
|
ClassVer=2.0
|
|
Provider=%ManufacturerName%
|
|
CatalogFile=pf_vdisplay.cat
|
|
DriverVer=
|
|
|
|
[Manufacturer]
|
|
%ManufacturerName%=Standard,NT$ARCH$
|
|
|
|
[Standard.NT$ARCH$]
|
|
%DeviceName%=pf_vdisplay_Install, Root\pf_vdisplay
|
|
|
|
[SourceDisksFiles]
|
|
pf_vdisplay.dll=1
|
|
|
|
[SourceDisksNames]
|
|
1=%DiskName%
|
|
|
|
; =================== UMDF IddCx device ====================
|
|
|
|
[pf_vdisplay_Install.NT]
|
|
CopyFiles=UMDriverCopy
|
|
|
|
[pf_vdisplay_Install.NT.hw]
|
|
AddReg=pf_vdisplay_HardwareDeviceSettings
|
|
|
|
[pf_vdisplay_HardwareDeviceSettings]
|
|
HKR, , "UpperFilters", %REG_MULTI_SZ%, "IndirectKmd"
|
|
; (no "WUDF"/DeviceGroupId value: it only means anything under ProcessSharingEnabled, and this
|
|
; driver sets UmdfHostProcessSharing=ProcessSharingDisabled below — code in monitor.rs/control.rs
|
|
; reasons from the dedicated-WUDFHost guarantee, so the group id was dead weight.)
|
|
; Only the host (LocalSystem service) + admins may open the control device. Deliberately NO Everyone
|
|
; ACE (SudoVDA ships one for its user-mode host): the control plane creates/removes monitors and
|
|
; bootstraps the sealed frame channel (IOCTL_SET_FRAME_CHANNEL), so it is not for unprivileged callers.
|
|
HKR, , "Security", , "D:P(A;;GA;;;SY)(A;;GA;;;BA)"
|
|
|
|
[pf_vdisplay_Install.NT.Services]
|
|
AddService=WUDFRd,0x000001fa,WUDFRD_ServiceInstall
|
|
|
|
[pf_vdisplay_Install.NT.Wdf]
|
|
UmdfService=pf_vdisplay, pf_vdisplay_Install
|
|
UmdfServiceOrder=pf_vdisplay
|
|
UmdfKernelModeClientPolicy=AllowKernelModeClients
|
|
UmdfHostProcessSharing=ProcessSharingDisabled
|
|
UmdfFileObjectPolicy=AllowNullAndUnknownFileObjects
|
|
|
|
[pf_vdisplay_Install]
|
|
UmdfLibraryVersion=$UMDFVERSION$
|
|
ServiceBinary=%12%\UMDF\pf_vdisplay.dll
|
|
; "IddCx0102" is the extension's REGISTERED IDENTITY string (every IddCx release keeps it — the
|
|
; sample drivers ship it unchanged at IddCx 1.10); the real version floor is the binary's exported
|
|
; IddMinimumVersionRequired=10 (src/lib.rs). Do not "fix" this to IddCx0110 — that identity does
|
|
; not exist and the install would fail.
|
|
UmdfExtensions=IddCx0102
|
|
|
|
[WUDFRD_ServiceInstall]
|
|
DisplayName=%WudfRdDisplayName%
|
|
ServiceType=1
|
|
StartType=3
|
|
ErrorControl=1
|
|
ServiceBinary=%12%\WUDFRd.sys
|
|
|
|
[DestinationDirs]
|
|
UMDriverCopy=12,UMDF
|
|
|
|
[UMDriverCopy]
|
|
pf_vdisplay.dll
|
|
|
|
[Strings]
|
|
ManufacturerName="Punktfunk"
|
|
DiskName="Punktfunk Virtual Display Installation Disk"
|
|
WudfRdDisplayName="Windows Driver Foundation - User-mode Driver Framework Reflector"
|
|
DeviceName="Punktfunk Virtual Display"
|
|
|
|
REG_MULTI_SZ=0x00010000
|
|
REG_SZ=0x00000000
|
|
REG_EXPAND_SZ=0x00020000
|
|
REG_DWORD=0x00010001
|