Add a verifiable WDK build & driver-packaging CI pipeline#143
Conversation
Modern InfVerif (WDK 26100+) rejects a driver package whose [Version] section omits PnpLockdown; it is required so installed driver files are protected from modification. Harmless on older toolchains. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the non-building workflow stub with a pipeline that actually compiles the kernel driver and emits a signing-ready, verifiable package. - driver (x64): ensures the WindowsKernelModeDriver10.0 toolset is registered (works around the WDK-not-provisioned issue on windows-2022), auto-selects the SDK that carries the WDK kernel headers, builds unsigned (SignMode=Off), then stages .sys/.inf/.cat, builds a submission .cab, writes SHA256SUMS + BUILD-INFO, and attaches build provenance. - usermode (x64/x86): builds the SarAsio ASIO plugin. - tools/Install-WdkBuildEnv.ps1, tools/Package-SarDriver.ps1: reusable locally and in CI. - BUILDING.md: build, signing and follow-up notes (ARM64, Spectre, MSI). Signing is intentionally left to attestation / OSSign; the build only produces the verifiable, unsigned package they consume. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Beyond CI: this unlocks a free, signed driverThis PR is deliberately scoped to building the driver and emitting a verifiable, unsigned package. It stops at unsigned on purpose, because that package is the input to the real prize: OSSign signs open-source Windows drivers for free with EV + Microsoft attestation — they already do exactly this for a kernel driver, The one catch: OSSign wants the project owner to apply. Everything else is already in place:
I've staged that glue so it's near-zero effort after approval: two workflows on the Applying as the owner is ~30 minutes and the signed driver would live here in the official repo. Happy to help wire up the rest. |
What this does
Replaces the current
.github/workflows/build.ymlstub with a CI pipeline thatactually compiles the kernel driver and produces a verifiable, signing-ready
driver package — plus a small INF fix needed by modern InfVerif.
Included
driver (x64)job: registers theWindowsKernelModeDriver10.0toolset(works around it not being provisioned on the
windows-2022image), thenbuilds the driver unsigned (
SignMode=Off) and stages.sys/.inf/.cat, builds a submission.cab, writesSHA256SUMS.txt+BUILD-INFO.txt, and attaches build provenance.usermode (x64/x86)job: builds theSarAsioASIO plugin.tools/Install-WdkBuildEnv.ps1,tools/Package-SarDriver.ps1: usableboth locally and in CI.
inf: PnpLockdown=1: required by InfVerif on recent WDKs.BUILDING.md: build/signing notes and tracked follow-ups.Why
The previous workflow assumed a WDK on the runner and uploaded an MSI that was
never produced, so it could not build. This produces a reproducible, unsigned
package whose source↔binary link is verifiable (hashes + provenance) — the
prerequisite for free signing via Microsoft attestation / OSSign. Signing is
deliberately out of scope of the build.
Tested
Green end-to-end on
windows-2022(driver x64 + usermode x64/x86), artifactsdownloaded and verified;
gh attestation verifyon the.syspasses. Notableenvironment finding: the image's WDK is 10.0.26100, and the
.vcxproj'spinned
10.0.22621.0SDK ships without the matching kernel headers — so thebuild auto-selects the SDK version that actually carries
km\ntifs.h.Intentionally deferred (see BUILDING.md)
ARM64 (needs an
[Standard.NTARM64]INF model), Spectre mitigation for releasebuilds, the WiX MSI, and bumping a few actions off Node 20.