Windows驱动测试环境搭建:GitHub Actions runner-images WDK配置指南

Windows驱动测试环境搭建:GitHub Actions runner-images WDK配置指南

【免费下载链接】runner-images actions/runner-images: GitHub官方维护的一个仓库,存放了GitHub Actions运行器的镜像文件及相关配置,这些镜像用于执行GitHub Actions工作流程中的任务。 【免费下载链接】runner-images 项目地址: https://gitcode.com/GitHub_Trending/ru/runner-images

引言:驱动开发的痛点与解决方案

你是否还在为Windows驱动测试环境的繁琐配置而困扰?手动安装Windows Driver Kit(WDK)、配置SDK版本兼容性、搭建持续集成流程,这些重复且易出错的工作消耗了大量开发精力。本文将详细介绍如何利用GitHub Actions官方维护的runner-images仓库,快速搭建标准化的Windows驱动测试环境,实现驱动编译、签名和测试的全自动化流程。

读完本文后,你将能够:

  • 理解GitHub Actions runner-images中WDK的预安装机制
  • 配置支持Windows Server 2022/2025的驱动测试环境
  • 使用PowerShell脚本验证WDK安装完整性
  • 构建包含驱动签名和测试的GitHub Actions工作流
  • 解决常见的WDK版本兼容性问题

WDK与runner-images环境概述

WDK(Windows Driver Kit)简介

Windows Driver Kit(WDK,Windows驱动开发工具包)是微软提供的一套用于开发、测试和部署Windows驱动程序的工具集。它包含编译器、链接器、调试器、驱动示例以及测试框架,是Windows驱动开发的核心工具。

GitHub Actions runner-images项目

GitHub官方维护的runner-images仓库提供了用于GitHub Actions工作流的虚拟机镜像配置,这些镜像预安装了大量开发工具和环境,包括不同版本的WDK。开发者可以直接使用这些镜像,或基于其配置自定义驱动测试环境。

支持的Windows版本与WDK兼容性

Windows Server版本支持的WDK版本包含的SDK版本runner-images标签
Windows Server 2019WDK 10.0.19041Windows 10 SDK 10.0.19041windows-2019
Windows Server 2022WDK 10.0.22621Windows 11 SDK 10.0.22621windows-2022
Windows Server 2025WDK 10.0.26100Windows 11 SDK 10.0.26100windows-latest

注意:自2025年起,windows-latest标签将指向Windows Server 2025镜像,WDK版本同步更新至10.0.26100。

WDK在runner-images中的预安装机制

工具集配置文件解析

runner-images通过工具集配置文件定义预安装的软件组件。以Windows Server 2022为例,WDK的配置位于images/windows/toolsets/toolset-2022.json

{
    "visualStudio": {
        "version": "2022",
        "subversion": "17",
        "edition": "Enterprise",
        "workloads": [
            // ... 其他组件 ...
            "Component.Microsoft.Windows.DriverKit",
            "Microsoft.VisualStudio.Component.Windows11SDK.26100"
        ]
    }
}

该配置指定了安装Visual Studio 2022企业版时,同时安装WDK组件和Windows 11 SDK(版本26100)。

WDK安装脚本分析

WDK的具体安装过程由images/windows/scripts/build/Install-WDK.ps1脚本实现:

# 根据Windows版本选择合适的WDK安装包
if (Test-IsWin19) {
    $wdkUrl = "https://go.microsoft.com/fwlink/?linkid=2166289"
    $wdkExtensionPath = "C:\Program Files (x86)\Windows Kits\10\Vsix\VS2019\WDK.vsix"
} elseif (Test-IsWin22) {
    $wdkUrl = "https://go.microsoft.com/fwlink/?linkid=2324617"
}

# 静默安装WDK
Install-Binary -Type EXE `
    -Url $wdkUrl `
    -InstallArgs @("/features", "+", "/quiet") `
    -ExpectedSubject $(Get-MicrosoftPublisher)

# 安装VSIX扩展以获得构建目标支持
if (Test-IsWin19) {
    Install-VSIXFromFile (Resolve-Path -Path $wdkExtensionPath)
}

# 运行WDK测试验证安装
Invoke-PesterTests -TestFile "WDK"

脚本逻辑包括:

  1. 根据Windows版本选择对应WDK安装包URL
  2. 使用/quiet参数静默安装所有WDK功能
  3. 安装Visual Studio扩展(VSIX)以支持驱动项目构建
  4. 调用Pester测试框架验证安装结果

环境搭建步骤

1. 选择合适的runner-images

在GitHub Actions工作流中,通过runs-on指定使用的runner-images版本:

name: Windows Driver Test

on: [push, pull_request]

jobs:
  build-and-test:
    runs-on: windows-2022  # 或 windows-latest 以使用最新版本
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

2. 验证WDK安装状态

runner-images提供了预定义的WDK测试脚本WDK.Tests.ps1,可直接在工作流中调用:

# 检查WDK是否安装
$regKey = "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
$installedApplications = Get-ItemProperty -Path $regKey
$WDKVersion = $installedApplications | Where-Object DisplayName -eq 'Windows Driver Kit' | Select-Object -First 1 -ExpandProperty DisplayVersion
if (-not $WDKVersion) {
    Write-Error "WDK is not installed"
    exit 1
}
Write-Host "WDK version $WDKVersion is installed"

# 检查WDK VSIX扩展
$version = Get-VSExtensionVersion -packageName "Microsoft.Windows.DriverKit"
if (-not $version) {
    Write-Error "WDK VSIX extension is not installed"
    exit 1
}
Write-Host "WDK VSIX extension version $version is installed"

3. 配置驱动项目构建环境

创建或修改项目的Directory.Build.props文件,指定WDK和SDK版本:

<Project>
  <PropertyGroup>
    <!-- 指定Windows SDK版本 -->
    <WindowsTargetPlatformVersion>10.0.22621.0</WindowsTargetPlatformVersion>
    <!-- 指定WDK工具集版本 -->
    <PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
    <!-- 启用驱动签名 -->
    <SignMode>TestSign</SignMode>
    <!-- 指定测试证书 -->
    <TestCertificate>$(ProjectDir)testcert.pfx</TestCertificate>
  </PropertyGroup>
</Project>

4. 使用MSBuild编译驱动

在GitHub Actions工作流中添加构建步骤:

- name: Build driver
  run: |
    msbuild /t:Build /p:Configuration=Debug /p:Platform=x64 MyDriver.sln
  working-directory: ./driver-project

5. 配置驱动测试环境

使用WDK提供的测试工具配置测试环境:

# 安装测试签名证书
certutil -f -p password -importpfx testcert.pfx

# 启用测试签名
bcdedit /set testsigning on

# 重启(在GitHub Actions中不需要实际重启,因为环境已预配置)

自动化测试工作流设计

完整的GitHub Actions工作流示例

name: Driver CI/CD Pipeline

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build-test-deploy:
    runs-on: windows-2022
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Validate WDK installation
        run: |
          $regKey = "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
          $WDKVersion = Get-ItemProperty -Path $regKey | Where-Object DisplayName -eq 'Windows Driver Kit' | Select-Object -First 1 -ExpandProperty DisplayVersion
          Write-Host "WDK Version: $WDKVersion"
          if (-not $WDKVersion) { throw "WDK not found" }

      - name: Build driver
        run: msbuild /t:Build /p:Configuration=Debug /p:Platform=x64 MyDriver.sln
        working-directory: ./src

      - name: Run static analysis
        run: msbuild /t:RunCodeAnalysis /p:Configuration=Debug /p:Platform=x64 MyDriver.sln
        working-directory: ./src

      - name: Sign driver
        run: |
          $signToolPath = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe"
          & $signToolPath sign /f testcert.pfx /p password /t http://timestamp.digicert.com ./src/x64/Debug/MyDriver.sys

      - name: Run driver tests
        run: |
          # 启动测试驱动程序
          sc create MyDriver type=kernel binPath= C:\path\to\MyDriver.sys
          sc start MyDriver
          
          # 运行测试用例
          .\TestDriver.exe
          
          # 停止并删除驱动
          sc stop MyDriver
          sc delete MyDriver

工作流各阶段说明

mermaid

  1. 代码检出:从版本库获取驱动源代码
  2. WDK安装验证:确认runner环境中WDK已正确安装
  3. 驱动编译:使用MSBuild构建驱动项目
  4. 静态代码分析:运行WDK提供的代码分析工具检测潜在问题
  5. 驱动签名:使用测试证书对驱动进行签名
  6. 驱动加载测试:验证驱动能否正确加载和卸载
  7. 功能测试:运行自定义测试用例验证驱动功能
  8. 清理环境:停止驱动服务并清理测试文件

常见问题解决方案

WDK版本不匹配问题

症状:编译时出现"无法找到Windows SDK版本10.0.xxx.0"错误。

解决方案

  1. 检查runner-images版本支持的SDK版本:

    # 查看已安装的Windows SDK版本
    Get-ChildItem "HKLM:\Software\Microsoft\Windows Kits\Installed Roots" | Get-ItemProperty | Select-Object -ExpandProperty KitsRoot10
    
  2. 更新项目配置文件,指定可用的SDK版本:

    <WindowsTargetPlatformVersion>10.0.22621.0</WindowsTargetPlatformVersion>
    

驱动签名失败

症状:签名过程中出现"证书无效"或"拒绝访问"错误。

解决方案

  1. 使用GitHub Secrets存储证书密码:

    - name: Sign driver
      run: |
        $signToolPath = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe"
        & $signToolPath sign /f testcert.pfx /p $env:CERT_PASSWORD /t http://timestamp.digicert.com ./src/x64/Debug/MyDriver.sys
      env:
        CERT_PASSWORD: ${{ secrets.CERT_PASSWORD }}
    
  2. 确保证书包含代码签名权限:

    # 检查证书属性
    certutil -dump testcert.pfx
    

测试签名未启用

症状:驱动加载失败,提示"驱动程序未签名"。

解决方案

  1. 在测试环境中启用测试签名:
    # 查看当前测试签名状态
    bcdedit /enum {current} | findstr "testsigning"
    
    # 启用测试签名(需要管理员权限)
    bcdedit /set testsigning on
    

注意:GitHub Actions runner默认已启用测试签名,无需额外配置。

驱动测试框架缺失

症状:无法运行wdftest或其他WDK测试工具。

解决方案

  1. 确认WDK测试组件已安装:

    # 检查WDK测试工具安装路径
    Test-Path "C:\Program Files (x86)\Windows Kits\10\Testing\Runtimes\WDTF\Framework\Wdtf.dll"
    
  2. 如果缺失,手动安装WDK测试组件:

    # 安装WDK测试组件
    Install-Binary -Type EXE `
      -Url "https://go.microsoft.com/fwlink/?linkid=2324617" `
      -InstallArgs @("/features", "OptionId.WindowsDriverKit.Tests", "/quiet")
    

WDK版本迁移指南

从Windows Server 2022迁移到2025

Windows Server 2025(windows-latest)带来了WDK 10.0.26100和新的测试工具,迁移时需注意以下变化:

变更项Windows Server 2022Windows Server 2025
WDK版本10.0.2262110.0.26100
默认Python版本3.93.11
OpenSSL版本1.1.13.5.2
MongoDB支持5.x7.x
已移除的组件BizTalk ServerWDK 10.0.19041支持

迁移步骤:

  1. 更新工作流中的runs-on标签:

    runs-on: windows-latest  # 现在指向Windows Server 2025
    
  2. 更新项目的SDK版本:

    <WindowsTargetPlatformVersion>10.0.26100.0</WindowsTargetPlatformVersion>
    
  3. 调整依赖的Python脚本以兼容3.11+语法

  4. 更新OpenSSL相关代码以适应3.x版本API变化

总结与展望

本文详细介绍了如何利用GitHub Actions runner-images快速搭建Windows驱动测试环境,包括WDK安装验证、驱动编译配置、自动化测试工作流设计以及常见问题解决方案。通过使用预配置的runner-images,开发者可以显著减少环境配置时间,专注于驱动程序的功能开发和测试。

随着Windows Server 2025的发布,WDK 10.0.26100带来了对最新硬件和Windows功能的支持。未来,GitHub Actions runner-images将继续跟进微软的更新节奏,提供更完善的驱动开发环境。建议开发者定期关注runner-images项目公告,及时了解工具更新和 deprecation通知。

最后,我们鼓励开发者:

  • 收藏本文以备日常开发参考
  • 关注项目仓库获取最新更新
  • 在评论区分享您的使用经验和问题

【免费下载链接】runner-images actions/runner-images: GitHub官方维护的一个仓库,存放了GitHub Actions运行器的镜像文件及相关配置,这些镜像用于执行GitHub Actions工作流程中的任务。 【免费下载链接】runner-images 项目地址: https://gitcode.com/GitHub_Trending/ru/runner-images

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值