Windows 驱动程序策略

Windows 包含一个名为 内核代码完整性 的安全功能,可通过确保系统上加载的内核驱动程序以完整性运行并由 Microsoft 信任的机构进行加密签名来帮助保护系统。

如果看到此消息,则表示驱动程序或内核模式软件未正确签名或不符合 Windows 内核代码完整性签名要求。

阻止驱动程序时显示的 Windows 安全中心对话框

Windows 要求通过 Windows 硬件兼容性计划 (WHCP) 过程提交和签署所有新驱动程序。 Windows 以前受信任的驱动程序由现已过期的 交叉签名程序 签名。 但是,在 2026 年 4 月安全更新中,默认情况下不再信任这些驱动程序。 该公告可在此处获得: https://go.microsoft.com/fwlink/?linkid=2356646。

什么是 Windows 驱动程序策略?

Windows 驱动程序策略是 Windows 内核中的一项策略,用于限制可以在设备上加载哪些内核模式驱动程序。 激活时,仅允许加载以下驱动程序:

  1. 驱动程序已通过 Microsoft WHCP 认证过程正确签名
  2. Windows 驱动程序策略上显示的驱动程序允许由交叉签名程序签名的值得信赖的驱动程序列表

未经过 Microsoft WHCP 签名或未出现在 Windows 驱动程序策略上的驱动程序将在范围内启用的系统上被阻止。

此功能有助于保护你免受潜在的不安全或未经测试的驱动程序的侵害,从而降低由未经审查的驱动程序和驱动程序发布者导致的恶意软件、系统不稳定和安全漏洞的风险。

此功能的工作原理是什么?

Windows 驱动程序策略使用两阶段方法(如 智能应用控制 )来逐步增强对设备的保护:

评估模式 (审核)

首次激活该功能时,它会在 评估模式下 启动。 在此阶段中:

  • 将审核策略阻止的驱动程序 ,但仍允许加载 。 这可确保你的设备在 Windows 确定强制措施是否适合你的系统时继续正常工作。
  • Windows 会跟踪系统上有多少驱动程序会受到此策略的影响。
  • 如果在评估过程中检测到违反策略的驱动程序,则会 重置 评估进度。 这意味着强制执行倒计时重新开始,让 Windows 有更多时间观察系统的驱动程序使用情况。

评估标准

Windows 将监视以下条件,以确定设备何时准备好强制执行:

  • 系统正常运行时间 :您的设备必须累积 250 小时 的有效使用时间。
  • 启动会话 :自评估开始以来,设备必须在Windows Server) 上重新启动至少 3 次 (2 次。
  • 无策略冲突 :如果在评估期间加载了将被阻止的驱动程序,则运行时间和启动会话计数器将 重置为零 ,从而延长评估期。

如果设备始终加载通过策略并满足这些条件的驱动程序,则系统被视为适合强制执行的候选系统。

强制模式

满足评估条件后,Windows 将自动转换为 强制模式 。 在此阶段中:

  • 防止驱动程序不满足 Windows 驱动程序策略中的签名要求,防止设备受到保护。
  • 这些驱动程序 将被阻止加载 和生成诊断数据供 Microsoft 查看,以及可在 Windows 事件日志中查看的条目。
  • 策略中包含了特定驱动程序和发布者的允许列表,以允许某些广泛使用但尚未通过 WHCP 认证的旧驱动程序继续运行。

强制模式处于活动状态后,该策略在重新启动后仍然有效。

常见问题

如何实现知道驱动程序是否被阻止?

如果此策略阻止了驱动程序,你可能会看到:

  • 硬件设备无法正常运行。
  • 无法识别打印机、网络适配器、GPU 等 (外围设备或组件 ) 。
  • 依赖内核驱动程序的应用程序无法启动。

可通过使用以下两种方法检查代码完整性事件日志来确认是否由 Windows 驱动程序策略负责。

手动查询代码完整性事件

  1. 右键单击“开始”按钮,然后选择“事件查看器”。
  2. 在左窗格中,导航到: 应用程序和服务日志>Microsoft>Windows>CodeIntegrity>操作
  3. 查看或筛选日志中具有以下 ID 的事件:
  • 事件 ID 3076 — 驱动程序 已审核 (本应被阻止,但由于策略处于审核模式) ,因此被允许。
  • 事件 ID 3077 — 驱动程序被 阻止 加载,因为它违反了强制策略。

在事件详细信息中,查找 策略 ID 字段。 此功能引起的事件将引用以下策略 GUID 之一:

  • 审核策略 : {784C4414-79F4-4C32-A6A5-F0FB42A51D0D}
  • 强制执行策略 :{8F9CB695-5D48-48D6-A329-7202B44607E3}

使用 PowerShell 查询代码完整性事件

可以使用 PowerShell 快速查找与此功能相关的事件:

# Find audit events (Event ID 3076) from the Windows Driver audit policy

$events = Get-WinEvent -LogName 'Microsoft-Windows-CodeIntegrity/Operational' -FilterXPath "*[System[EventID=3076]]" -ErrorAction SilentlyContinue |

Where-Object { $_.Message -like '*784C4414-79F4-4C32-A6A5-F0FB42A51D0D*' }

$results = $events | ForEach-Object {

$xml = [xml]$_.ToXml()

$data = $xml.Event.EventData.Data

[PSCustomObject]@{

TimeCreated = $_.TimeCreated

DriverName    = ($data | Where-Object { $_.Name -eq 'File Name' }).'#text'

ProductName = ($data | Where-Object { $_.Name -eq 'ProductName' }).'#text'

ParentProcess = ($data | Where-Object { $_.Name -eq 'Process Name' }).'#text'

}

}

$results | Select-Object DriverName, ProductName, ParentProcess -Unique | Format-Table -AutoSize -Wrap

# Find block events (Event ID 3077) from the Windows Driver enforced policy

$events = Get-WinEvent -LogName 'Microsoft-Windows-CodeIntegrity/Operational' -FilterXPath "*[System[EventID=3077]]" -ErrorAction SilentlyContinue |

Where-Object { $_.Message -like '*8F9CB695-5D48-48D6-A329-7202B44607E3*' }

$results = $events | ForEach-Object {

$xml = [xml]$_.ToXml()

$data = $xml.Event.EventData.Data

[PSCustomObject]@{

TimeCreated = $_.TimeCreated

DriverName    = ($data | Where-Object { $_.Name -eq 'File Name' }).'#text'

ProductName = ($data | Where-Object { $_.Name -eq 'ProductName' }).'#text'

ParentProcess = ($data | Where-Object { $_.Name -eq 'Process Name' }).'#text'

}

}

$results | Select-Object DriverName, ProductName, ParentProcess -Unique | Format-Table -AutoSize -Wrap

事件详细信息将包括审核或阻止的驱动程序的名称以及尝试加载驱动程序的进程的名称,这有助于确定受影响的驱动程序或设备。

如果驱动程序被阻止,我该怎么办?

如果你是设备用户或 IT 管理员

  1. 使用上述步骤检查事件日志,以确定被阻止的驱动程序。

  2. 检查 Windows 更新以获取更新的驱动程序。 经过 WHPP 认证的已签名驱动程序可能已通过 Windows 更新提供。 转到设置>Windows 更新>高级选项>可选更新>驱动程序更新以检查可用的驱动程序更新。

  3. 访问制造商的网站 。 从供应商的官方支持页面下载最新的驱动程序版本 — 较新版本更有可能是 WHCP 签名的。

  4. 与发布驱动程序的硬件或软件供应商联系。 询问他们是否提供 WHPP 认证版本的驱动程序以及从何处访问它。 大多数供应商已经对其驱动程序进行了 WHCP 认证。

如果你是驱动程序发布者

如果为 Windows 开发和分发内核模式驱动程序,则必须确保驱动程序已通过 WHCP 进程进行签名:

  1. 加入 Windows 硬件开发人员中心 。 在 Windows 硬件开发人员中心 注册,并持有有效的 EV (扩展验证) 代码签名证书。
  2. 创建提交 . 在硬件仪表板中,创建新产品并提交驱动程序包以进行认证。
  3. 运行 HLK 测试 。 使用 Windows 硬件实验工具包 (HLK) 对驱动程序类型和设备类别运行所需的测试。
  4. 提交以供签名 . 测试通过后,将 HLK 结果与驱动程序包一起提交。 Microsoft 将使用 WHCP 证书对驱动程序进行签名。
  5. 分发已签名的驱动程序 。 签名后,通过 Windows 更新和/或网站发布 WHPP 认证的驱动程序。

重要

在 Windows 驱动程序策略处于强制模式的系统上,可能会阻止仅使用没有 WHCP 证书的交叉证书签名的驱动程序。

如何实现关闭 Windows 驱动程序策略?

警告

禁用此功能会降低设备的安全性。 建议保持启用状态,并与驱动程序发布者合作,改为获取 WHCP 签名的驱动程序。

步骤取决于安装的 Windows 更新。 您可以通过转到“设置>”Windows 更新历史记录来进行检查>。

具有 2026 年 7 月更新或更高版本更新的设备

在这些设备上,管理员无需更改安全启动设置即可关闭策略:

  1. 右键单击“开始”,然后选择“终端 (管理员) ”。

  2. 运行以下命令:

    CiTool.exe --remove-policy "{8F9CB695-5D48-48D6-A329-7202B44607E3}"
    
  3. 重新启动设备。

运行命令后,该策略将继续保护当前 Windows 会话。 重启将完成更改,以便为将来的会话禁用该策略。

未安装 2026 年 7 月更新的设备

在较旧版本的 Windows 上,该策略具有额外的启动保护。 必须暂时关闭安全启动并手动删除强制策略。

  1. 重新启动计算机并进入 UEFI 固件设置菜单 (有时称为 BIOS) 。 用于打开此菜单的键因制造商而异,但通常是 F2、F10DeleteEsc

    也可从 Windows 打开菜单。 转到“设置>”“系统>恢复>” “高级启动>”“立即重启”。 然后选择“疑难解答>高级选项>”、“UEFI 固件设置>重启”。

  2. 找到 “安全启动”(通常位于“ 安全性 ”或 “启动”下),并将其设置为 “已禁用”。 保存所做的更改并启动 Windows。

  3. 右键单击“开始”,然后选择“终端 (管理员) ”。

  4. 通过运行以下命令装载 EFI 系统分区:

    mountvol S: /s
    

    如果已在使用中,请 S: 选择另一个可用的驱动器号并在其余命令中使用该字母。

  5. 从 EFI 系统分区和 Windows 中删除强制策略:

    Remove-Item "S:\EFI\Microsoft\Boot\CiPolicies\Active\{8F9CB695-5D48-48D6-A329-7202B44607E3}.cip" -Force
    Remove-Item "$env:windir\System32\CodeIntegrity\CiPolicies\Active\{8F9CB695-5D48-48D6-A329-7202B44607E3}.cip" -Force
    

    如果 Windows 报告找不到其中一个文件,请继续下一步。

  6. 卸载 EFI 系统分区:

    mountvol S: /d
    
  7. 重新启动设备。 该策略现已禁用。

  8. 返回到 UEFI 固件设置,并重新启用安全启动以还原其其他保护。

为什么我的驱动程序之前工作,突然被阻止?

该功能在 评估模式下 启动,它记录但不会阻止未经认证的驱动程序。 在系统满足评估条件 (足够的正常运行时间并重新启动且没有策略违规) 后,策略会自动转换为 强制模式 ,并且未通过 WHCP 签名的驱动程序将被阻止。 这可能导致之前工作的驱动程序停止加载。

是否可以在不完全禁用单个驱动程序的情况下允许该功能?

目前无法绕过针对单个驱动程序的策略。 可以完全禁用该功能 (如上) 所示,或者最好联系驱动程序发布者,要求他们提供驱动程序的 WHPP 签名版本。

这是否影响用户模式应用程序或仅影响内核驱动程序?

此功能 仅适用于内核模式驱动程序 。 用户模式应用程序不受此策略的影响。

我的设备是否处于评估模式或强制模式?

可以通过在 PowerShell 中以管理员身份运行以下命令来进行检查:

$evalPolicy = (citool -lp -json | ConvertFrom-Json).Policies | Where-Object { $_.PolicyID -eq "784c4414-79f4-4c32-a6a5-f0fb42a51d0d" }

$enforcedPolicy = (citool -lp -json | ConvertFrom-Json).Policies | Where-Object { $_.PolicyID -eq "8F9CB695-5D48-48D6-A329-7202B44607E3" }

if ($enforcedPolicy.IsEnforced -and $enforcedPolicy.IsAuthorized) { Write-Host "✅ The feature is in enforcement mode" -ForegroundColor Green }

elseif($evalPolicy.IsEnforced -and $evalPolicy.IsAuthorized) { Write-Host "✅ The feature is in evaluation mode" -ForegroundColor Green }

else { Write-Host "❌ The feature is not available on this system" -ForegroundColor Red }

这会影响 Windows Server 吗?

是 - Windows Server 2025 和更新的服务器平台。 但是,在 Windows Server 上,启动会话要求是 2 次重新启动 (,而客户端版本 3 次) 。 所有其他条件均相同。

如果我重置或重新安装 Windows 会发生什么情况?

如果重置或重新安装 Windows,该功能将在评估模式下重新启动。 评估计数器将被重置,并且将从头重新开始向强制执行的过渡。

需要更多帮助吗?

如果仍然遇到阻止的驱动程序的问题,请访问 Microsoft 社区论坛联系 Microsoft 支持 部门。

欢迎提供有关此功能的反馈。 若要分享你的体验:

  1. 在 Windows 中,打开 反馈中心 (按 Win + F ) 。

2. 在“步骤 2 — 选择类别”中,选择“安全和隐私App Control”>。