Windows 11 驱动开发实战:Windows-driver-samples 仓库导读、环境搭建与全量构建指南

发布时间:2026/9/27 7:08:03
Windows 11 驱动开发实战:Windows-driver-samples 仓库导读、环境搭建与全量构建指南 示例工程【免费下载链接】Windows-driver-samplesThis repo contains driver samples prepared for use with Microsoft Visual Studio and the Windows Driver Kit (WDK). It contains both Universal Windows Driver and desktop-only driver samples.项目地址https://gitcode.com/gh_mirrors/wi/Windows-driver-samples点击查看免费下载本文以微软官方 WDKWindows Driver Kit驱动示例仓库 README.md 为主线系统讲解 Windows 11 驱动开发所需的 Visual Studio 2022 WDK 11 环境、Universal Windows Driver 与 WDF 框架的核心概念并结合仓库内 Building-Locally.md、Build-Samples.ps1 等构建脚本给出从克隆代码、还原 WDK 依赖到并行构建全部样例的一站式实操方案。读完本文你将掌握如何搭建驱动开发环境、理解仓库 132 个样例的组织方式并熟练使用Build-Samples.ps1完成全量或定向构建。仓库定位Windows 11 官方 WDK 驱动样例合集本仓库是微软官方的 Windows Driver KitWDK驱动代码样例集专门面向Windows 11同时为Universal Windows Driver通用 Windows 驱动提供基础支撑覆盖从手机到桌面 PC 的各种硬件形态因子。仓库描述明确指出这些样例既包含 Universal Windows Driver也包含仅限桌面desktop-only的驱动样例全部面向 Visual Studio 与 WDK 设计可直接作为驱动开发的起点也可作为把旧驱动移植到新版 Windows 的参考。从仓库目录结构可以直观看到其覆盖面之广每一类都对应一个顶层目录目录技术领域典型样例audio音频驱动ACX、SysVAD、简单音频样例等audio/sysvad、audio/simpleaudiosamplegeneral通用示例DCHU、toaster、ioctl、echo、pcidrv、registry 等general/toaster、general/pcidrvfilesys文件系统FastFAT、CDFS、MiniFilter 系列filesys/miniFilter/avscan、filesys/fastfatnetwork网络NDIS 扩展/过滤/协议、NetAdapterCx、WLAN WDI/wificx、WFPnetwork/ndis/mux、network/wlan/WDIusbUSBKMDF/UMDF 功能驱动、UcmCx、USB View 工具等usb/kmdf_fx2、usb/usbviewstorage存储类驱动、miniport、iSCSI、DSMstorage/class/classpnp、storage/miniports/storahcihid、inputHID 与输入设备hid/hidusbfx2、input/kbfiltr、input/moufiltrsensors、spb传感器与简单外设总线SPBsensors/ADXL345Acc、spb/SkeletonI2Cvideo、avstream显示与音视频流KMDOD、间接显示、AVStream 相机video/IndirectDisplay、avstream/avscamerabluetooth、nfc、wlan无线连接蓝牙回显、NFC、Wi-Fibluetooth/bthecho、nfc/NfcCxSamplepofx、powerlimit、thermal电源与热管理PEP、电源限制、热传感器pofx/WDF、powerlimit/plpolicyprint、wia、pos打印、图像采集与销售点设备wia/wiadriverex、pos/drivers/MagneticStripeReadertools、setup、security开发工具与安全SDV、KASan、devcon、ELAMtools/sdv、setup/devcon、security/elam这些目录下的样例均带有.vcxproj/.sln工程文件与.inx安装信息模板构建时生成.inf文件可直接在 Visual Studio 中打开、编译、部署是学习各类驱动技术的最佳参考实现。Windows 11 驱动开发环境Visual Studio 2022 WDK 11README 明确指出 Windows 11 驱动开发环境已集成到 Visual Studio之中。推荐组合为Visual Studio 2022Windows Driver KitWDK11安装后即可在 VS 内完成驱动的编写、构建、测试与部署。WDK 11 的改进领域覆盖相机camera、打印print、显示display、近场通信NFC、WLAN、蓝牙Bluetooth等多个方向。驱动开发的完整资料可查阅官方 Windows Driver Kit 文档。三种 WDK 安装形态仓库的 Building-Locally.md 进一步说明WDK 有NuGet 包、MSI 安装器、EWDK ISO三种安装形态可任选其一NuGet 包方式本仓库默认方式见下文通过nuget restore把 WDK 作为依赖还原到本地packages目录无需全局安装 WDK适合 CI 与可复现构建MSI 安装器传统方式把 WDK 组件装入 Visual StudioEWDKEnterprise WDK独立 ISO无需安装 Visual Studio挂载后运行.\LaunchBuildEnv即可获得独立构建环境。两大核心概念Universal Windows drivers 与 WDF通用 Windows 驱动Universal Windows driversREADME 强调的核心卖点编写一次驱动即可在 Windows 11 桌面版及其他共享同一组接口的 Windows 版本上运行。通用驱动通过统一、可验证的接口集实现跨版本兼容避免为不同 Windows 版本维护多份代码。仓库中的样例大多遵循这一模型因此在构建时会按平台x64 / arm64分别产出。Windows Driver FrameworksWDFWDF 是一组用于简化高质量设备驱动编写的库包含KMDFKernel-Mode Driver Framework内核态驱动框架典型样例见 general/echo/kmdf、usb/kmdf_fx2UMDFUser-Mode Driver FrameworkUMDF 2.x用户态驱动框架典型样例见 general/echo/umdf2、usb/umdf2_fx2、serial/VirtualSerial2UMDF 虚拟串口。新手可以从模板驱动入手README 提供了三条官方练习路径——基于模板编写 UMDF 驱动、编写 KMDF “Hello World” 驱动、基于模板编写 KMDF 驱动。从样例代码到生产驱动的注意事项README 特别提醒基于样例代码发布正式设备驱动前必须进行重要修改。样例为了演示与教学通常会简化安全策略、资源管理、错误处理与硬件交互细节直接部署到生产环境存在风险。官方提供了《From Sample Code to Production Driver - What to Change in the Samples》专题列明需要替换或补强的部分如设备 ID/厂商 ID、驱动程序签名与证书、安全描述符、电源管理策略等。本地构建全流程从克隆到全量并行构建仓库根目录的 Building-Locally.md 是一份可直接照做的本地构建指南核心流程如下。前置条件安装# 安装 PowerShell 与 Git若尚未安装 winget install --id Microsoft.Powershell --source winget winget install --id Git.Git --source winget随后安装任一受支持的 WDKNuGet / MSI / EWDK 三选一然后克隆仓库git clone --recurse-submodules https://github.com/microsoft/Windows-driver-samples.git cd .\Windows-driver-samples说明--recurse-submodules用于同步子模块依赖本镜像仓库以只读方式提供本地克隆后即可构建。按 WDK 安装形态准备环境WDK 走 NuGet先安装 NuGet 并还原依赖见下文“NuGet 依赖还原”一节winget install --id Microsoft.NuGet --source winget nuget restore -PackagesDirectory .\packagesWDK 走 EWDK挂载 EWDK ISO在挂载盘打开终端并启动构建环境.\LaunchBuildEnv一键构建全部样例在PowerShell 7中直接运行Build-Samples.ps1要求 PowerShell 7因为它使用ForEach-Object -Parallel.\Build-Samples.ps1脚本会自动完成以下编排其步骤说明见 Build-Samples.ps1 头部注释确认 VS DevShell 或 EWDK 开发环境已激活通过 ListAllSamples.ps1 动态发现所有样例或使用-Samples参数指定自动检测构建环境-RunMode可强制指定与 WDK build number从 exclusions.csv 加载排除规则支持通配符路径并行构建所有未被排除的 样例/配置/平台 组合生成 CSV 与 HTML 总览报告。从 BuildEnvironment.ps1 的源码可见环境检测通过vswhere.exe枚举安装了 WDK 组件的 Visual Studio 实例同时识别Microsoft.Windows.DriverKit与 Build Tools 的Component.Microsoft.Windows.DriverKit.BuildTools两种组件 ID未找到时脚本会报错退出。预期输出与报告一份典型构建输出如下数值随 WDK 版本变化--- WDK Sample Build Plan ------------------------------------------ Environment: NuGet Build Number: 26100 NuGet Version: 10.0.26100.1 WDK VS Component: 10.0.26100.1882 InfVerif Options: /samples Samples: 132 (0 skipped) Configurations: Debug, Release Platforms: x64, arm64 Combinations: 528 Exclusions: 4 ... --- Build Complete ------------------------------------------------- Succeeded: 526 Unsupported: 2 Failed: 0 Log directory: .\_logs CSV report: .\_logs\_overview.csv HTML report: .\_logs\_overview.htm构建过程使用进度图例TTotal BBuilt RRunning PPending SSucceeded EExcluded UUnsupported FFailed OSporadic。全部日志与报告输出到_logs目录其中_overview.csv可用于后续分析仓库还提供 .github/scripts/Join-CsvReports.ps1 合并多份 CSV 报告。Build-Samples.ps1全部参数详解结合 Build-Samples.ps1 的参数定义与 Building-Locally.md 的使用示例参数说明如下参数默认值说明-Samples全部由ListAllSamples.ps1动态发现指定样例名或通配符如tools.*、audio.*样例名由相对目录路径转换而来反斜杠转点号、小写如usb.kmdf_fx2-ConfigurationsDebug, Release或环境变量WDS_Configuration构建配置-Platformsx64, arm64或环境变量WDS_Platform目标平台-NtTargetVersion环境变量WDS_NtTargetVersion或最新可用版本_NT_TARGET_VERSION即驱动链接的 WDK 库版本库对应的 OS 版本-RunModeAuto构建环境模式Auto / WDK / NuGet / EWDKAuto 按 NuGet → EWDK → WDK 顺序自动检测-ThrottleLimit逻辑处理器数 × 5最大并行任务数调试构建失败时建议设为 1-LogFilesDirectory_logs构建日志目录-ReportFileName_overview或环境变量WDS_ReportFileName报告文件基名生成.csv与.htm-InfOptions按 WDK build number 自动判定附加 InfVerif 选项如/samples、/msft-Verbose关打印每个样例的开始/结束信息常见用法示例# 查看完整参数参考 Get-Help .\Build-Samples.ps1 -Detailed # 构建所有样例全部配置与平台 .\Build-Samples.ps1 # 限制并行度适合调试构建失败 .\Build-Samples.ps1 -ThrottleLimit 1 # 只构建 tools 目录内的样例 .\Build-Samples.ps1 -Samples tools.* # 构建单个样例仅 Debug|x64 .\Build-Samples.ps1 -Samples tools.sdv.samples.sampledriver -Configurations Debug -Platforms x64 # 链接到旧版 WDK 库构建 .\Build-Samples.ps1 -NtTargetVersion 10.0.22000样例发现机制ListAllSamples.ps1 的源码揭示了样例的发现与命名规则递归查找仓库内所有.sln文件跳过路径中含packages段NuGet 包目录的项然后将相对目录路径中的反斜杠替换为点号并转为小写得到规范样例名如general\toaster\toastdrv→general.toaster.toastdrv。这解释了为什么-Samples参数使用点分隔的小写名称。通过-NtTargetVersion控制链接库版本_NT_TARGET_VERSION决定驱动链接的 WDK 库版本即“库的 OS 版本”。它接受完整形式10.0.22000或短标签22000省略时使用最新版本。合法取值由当前激活的 WDK 自动发现无需硬编码脚本 Get-NtTargetVersions.ps1 会在还原的 NuGet 包目录、已安装 WDK 目录及WDKContentRoot/WindowsSdkDir环境变量指向的构建树中查找DriverGeneral.xml解析其中的_NT_TARGET_VERSION枚举输出每个 Windows 10/11 条目的Version如10.0.28000、Tag如28000、CodeNTDDI 值如0xA000012与Build。因此新版 WDK 增加新版本号时构建系统自动感知。列出可用版本.\Get-NtTargetVersions.ps1该脚本还支持-Newest N限制返回最新 N 个版本以及-AsMatrixJson输出紧凑 JSON 数组{version, tag}专为 GitHub Actions 的构建矩阵设计见下文 CI 一节。排除规则exclusions.csv部分样例在特定环境下无法构建仓库根目录的 exclusions.csv 记录了这些规则。每行排除一个路径支持通配符对应的配置/平台组合并可附加 WDK build 号范围与_NT_TARGET_VERSION范围Path,Configurations,MinBuild,MaxBuild,MinNtTargetVersion,MaxNtTargetVersion,Reason列含义Path样例路径反斜杠分隔支持*/?通配符Configurations分号分隔的Config\|Platform模式*表示全部如*\|ARM64、Debug\|x64MinBuild/MaxBuild包含式 WDK build 号范围留空表示无边界MinNtTargetVersion/MaxNtTargetVersion包含式-NtTargetVersionbuild 号范围如22621匹配10.0.22621用于“链接旧库时失败”的样例留空表示无边界Reason人工可读的原因说明保持最后一列含逗号时需加引号只有当所有被填充的条件都匹配当前运行路径、配置/平台、WDK build 范围、NT target 范围按 AND 组合时该行规则才生效。留空列表示忽略该维度。从实际文件内容可以观察到两类典型排除原因WDK 版本过旧导致的编译错误MaxBuild限制如audio\acx\samples\audiocodec\driver在 build ≤ 22621 时缺少acx.h链接旧版库时的 DDI 缺失MaxNtTargetVersion限制如audio\sysvad在链接 10.0.22000 库时KSJACK_DESCRIPTION3未声明音频插孔描述符 v3 是 22H2 即 10.0.22621 才新增的network\netadaptercx\netvadapter与network\wlan\wificx请求的 NDIS/DDI 版本高于所链接库C1189powerlimit\plclient在旧库中POWER_LIMIT_ATTRIBUTES未声明C2061。自行排除样例时例如“某样例在链接 10.0.22621 及更旧库时仅 Debug 构建失败因为使用了更新的 API”可追加somepath,Debug|*,,,,22621,uses an API newer than the 10.0.22621 libraryNuGet 依赖还原与版本固定仓库通过 NuGet 把 WDK/SDK 作为包依赖。根目录 packages.config 声明了 5 个包以当前仓库为例均锁定在10.0.28000.2526package idMicrosoft.Windows.SDK.CPP version10.0.28000.2526 targetFrameworknative / package idMicrosoft.Windows.SDK.CPP.x64 version10.0.28000.2526 targetFrameworknative / package idMicrosoft.Windows.SDK.CPP.arm64 version10.0.28000.2526 targetFrameworknative / package idMicrosoft.Windows.WDK.x64 version10.0.28000.2526 targetFrameworknative / package idMicrosoft.Windows.WDK.arm64 version10.0.28000.2526 targetFrameworknative /而 Directory.Build.props 在还原后的包存在时按平台导入对应的 WDK/SDK props例如packages\Microsoft.Windows.WDK.x64.10.0.28000.2526\build\native\Microsoft.Windows.WDK.x64.props这正是“WDK 走 NuGet”时msbuild能找到工具链的机制。固定特定 WDK NuGet 版本的步骤打开.\packages.config更新所有条目的版本打开.\Directory.build.props同步为相同版本重新执行nuget restore -PackagesDirectory .\packages。常用 NuGet 命令# 添加在线源 / 本地源 nuget sources add -Name MyFeed -Source https://nugetserver.com/_packaging/feedname/nuget/v3/index.json nuget sources add -Name MyFeed -Source \\path\to\mylocalrepo # 移除源、查看/清空本地缓存 nuget sources remove -Name MyFeed nuget locals all -list nuget locals all -clear使用 GitHub Actions 自动化构建驱动仓库提供 .github/Build-with-GitHub.md 指导在 GitHub 上托管代码的开发者用 Actions 自动构建驱动windows-2025-vs2026runner 预装了 Visual Studio 2026因此多数解决方案可直接用msbuild WDK NuGet 包构建无需手动安装 WDK。仓库自身的 CI 工作流见 .github/workflows/ci.yml 与 ci-pr.yml。一个最小可用工作流示例name: Build driver solution on: push: branches: - main jobs: build: strategy: matrix: configuration: [Debug, Release] platform: [x64] runs-on: windows-2025-vs2026 env: Solution_Path: path\to\driver\solution.sln steps: - name: Check out repository code uses: actions/checkoutv3 - name: Add MSBuild to PATH uses: microsoft/setup-msbuildv1.0.2 - name: Build solution run: | msbuild ${{ env.Solution_Path }} -p:Configuration:${{ env.Configuration }} -p:Platform:${{ env.Platform }} env: Configuration: ${{ matrix.configuration }} Platform: ${{ matrix.platform }}如果需要跨多个 WDK 目标版本做矩阵构建可将Get-NtTargetVersions.ps1 -AsMatrixJson的输出通过fromJSON注入矩阵该脚本即为 CI 用途设计了 JSON 输出模式。常见问题与构建注意事项预发布版 WDK 需关闭强名称校验仅在预发布 WDK 时必需。以管理员身份执行两条reg add命令在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\StrongName\Verification\*,31bf3856ad364e35与Wow6432Node对应项写入TestPublicKey值值为一段长公钥字符串构建前请从 Building-Locally.md 原文复制。完整背景见官方《Installing preview versions of the WDK》。usb\usbview需要 .NET Framework 目标包该样例依赖 .NET Framework 4.7.2 与 4.8.1三选一解决① VS 安装器中勾选 “.NET Framework 4.7.2 targeting pack” 与 “.NET Framework 4.8.1 SDK” 组件② 使用 EWDK已内置全部前置③ 手动下载对应 Developer Pack 安装。示例平台差异默认同时构建x64与arm64部分样例仅支持特定平台exclusions.csv中如*\|x64、*\|ARM64的配置即为此类限制。生产发布前务必改造样例代码如 README 所强调样例是学习与起步的参考发布前需按官方指引完成生产化改造签名、设备标识、安全与电源管理策略等。起步路径总结针对不同阶段的开发者README 给出的推荐路径是新手先完成三个独立练习UMDF 模板驱动、KMDF Hello World、KMDF 模板驱动它们互相独立、可按任意顺序完成入门到进阶在仓库中选择与目标硬件最接近的样例如 USB 设备参考 usb/kmdf_fx2 或 usb/umdf2_fx2PCI 设备参考 general/pcidrv打开其.sln阅读并构建移植旧驱动参考仓库中对应技术栈的最新样例对比新旧接口差异工程化使用 Build-Samples.ps1 全量构建做回归验证用 exclusions.csv 管理不可构建项必要时接入 GitHub Actions 实现 CI 自动构建。仓库根目录的 README.md、Building-Locally.md、Build-Samples.ps1、Get-NtTargetVersions.ps1、ListAllSamples.ps1、exclusions.csv、packages.config 与 .github/Build-with-GitHub.md 构成了一套完整的“环境搭建 → 样例探索 → 全量构建 → CI 自动化”闭环是 Windows 11 驱动开发者的权威起点。赞分享示例工程【免费下载链接】Windows-driver-samplesThis repo contains driver samples prepared for use with Microsoft Visual Studio and the Windows Driver Kit (WDK). It contains both Universal Windows Driver and desktop-only driver samples.项目地址https://gitcode.com/gh_mirrors/wi/Windows-driver-samples点击查看免费下载相关推荐Windows-driver-samples新特性Windows 11驱动开发改进与适配指南Windows driver samples新特性Windows 11驱动开发改进与适配指南 Windows driver samples是微软提供的Wind示例工程Windows-driver-samples智慧环境空气质量监测驱动开发Windows driver samples智慧环境空气质量监测驱动开发 Windows driver samples是微软提供的Windows驱动程序示例仓示例工程终极Windows驱动开发指南如何使用Docker快速配置Windows-driver-samples环境终极Windows驱动开发指南如何使用Docker快速配置Windows driver samples环境 Windows driver samples是微软示例工程上一篇Android 测试示例项目教程从入门到精通的完整指南下一篇Discourse Message Bus 教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考