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 监视以下条件,以确定设备何时准备好强制实施:

  • 系统运行时间 :设备必须已累计 使用 100 小时

  • 启动会话 :自评估开始以来,设备必须在Windows Server) 上重新启动至少 3 次 (2 次。

  • 无策略冲突 :如果在评估期间加载了要阻止的驱动程序,则运行时间和启动会话计数器 将重置为零 ,从而延长评估期。

如果设备持续加载通过策略并满足这些条件的驱动程序,则系统被视为强制实施的良好候选项。

强制模式

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

  • 设备受到保护,免受不符合 Windows 驱动程序策略中签名要求的驱动程序的侵害。

  • 阻止这些驱动程序 加载 和生成诊断数据,以供Microsoft查看,以及 Windows 事件日志中你可以查看的条目。

  • 策略中包含特定驱动程序和发布者的允许列表,以允许某些尚未经过 WHCP 认证的广泛使用的旧驱动程序继续运行。

强制模式处于活动状态后,策略将在重新启动后保持有效。

常见问题

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

  • 硬件设备无法正常工作。

  • 无法识别 (打印机、网络适配器、GPU 等 ) 的外围设备或组件。

  • 依赖于内核驱动程序的应用程序无法启动。

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

手动查询代码完整性事件    

  1. 右键单击“开始”按钮,然后选择“事件查看器 ”。

  2. 在左窗格中,导航到: 应用程序和服务日志 > Microsoft > Windows > CodeIntegrity > Operational

  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 更新以获取更新的驱动程序。 WHCP 认证的已签名驱动程序可能已通过Windows 更新提供。 转到设置 > Windows 更新 > 高级选项 > 可选更新 > 驱动程序更新检查以获取可用的驱动程序更新。

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

4 . 联系发布驱动程序的硬件或软件供应商 。 询问他们是否提供 WHCP 认证的驱动程序版本,以及访问它的位置。 大多数供应商已经 WHCP 认证了其驱动程序。

如果你是驱动程序发布者

如果开发和分发适用于 Windows 的内核模式驱动程序,必须确保通过 WHCP 过程对驱动程序进行签名:

  1. 加入 Windows 硬件开发人员中心 。 在 Windows 硬件开发人员中心 注册有效的 EV (扩展验证) 代码签名证书。

  2. 创建提交 。 在硬件仪表板中,创建一个新产品并提交驱动程序包进行认证。

  3. 运行 HLK 测试 。 使用 Windows Hardware Lab Kit (HLK) 针对驱动程序类型和设备类别运行所需的测试。

  4. 提交以对 进行签名 。 测试通过后,将 HLK 结果与驱动程序包一起提交。 Microsoft将使用 WHCP 证书对驱动程序进行签名。

  5. 分发已签名的驱动程序 。 签名后,通过Windows 更新和/或网站发布 WHCP 认证的驱动程序。

重要: 在强制模式下使用 Windows 驱动程序策略的系统上,可能会阻止仅使用交叉证书(没有 WHCP 认证)签名的驱动程序。

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

Windows 驱动程序策略是存储在 EFI 系统分区上的已签名代码完整性策略,受 Windows 早期启动组件保护。 关闭该功能需要执行以下手动步骤,以便以管理员身份运行的恶意软件不能篡改该功能:

步骤 1:禁用安全启动

  1. 重启计算机,然后 (BIOS) 输入 UEFI 固件设置菜单 。 通常可以通过在启动 ((例如 F2 F10 Del Esc )期间按某个键来执行此操作,检查设备制造商的文档)

    1. 或者,在 Windows 中:转到 “设置 > 系统 > 恢复 > 高级启动 > 立即重启 ”。 然后选择 故障排除 > 高级选项 > UEFI 固件设置 > 重启

  2. 在固件设置中,找到 安全启动 选项 (通常位于 “安全 ”或“ 启动 ”选项卡) 下。

  3. 将“安全启动”设置为 “禁用 ”。

  4. 保存更改并退出固件设置。

步骤 2:从 EFI 系统分区中删除策略文件

1. 以管理员身份打开 PowerShell

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

mountvol S: /s

可以使用任何可用的驱动器号来代替“S:”。

3. 删除审核策略文件:

del S:\EFI\Microsoft\Boot\CiPolicies\Active\{784C4414-79F4-4C32-A6A5-F0FB42A51D0D}.cip

4. 如果同时存在强制策略,请将其删除:

del S:\EFI\Microsoft\Boot\CiPolicies\Active\{8F9CB695-5D48-48D6-A329-7202B44607E3}.cip

5. 还检查 Windows 系统目录中的策略并将其删除:

del %windir%\System32\CodeIntegrity\CiPolicies\Active\{784C4414-79F4-4C32-A6A5-F0FB42A51D0D}.cip

del %windir%\System32\CodeIntegrity\CiPolicies\Active\{8F9CB695-5D48-48D6-A329-7202B44607E3}.cip

6. 卸载 EFI 分区:

mountvol S: /d

步骤 3:重启计算机

重启你的设备以使更改生效。 重启后,策略将不再处于活动状态,并且将允许加载所有已签名的驱动程序(包括未获得 WHCP 认证的驱动程序)。

步骤 4:重新启用安全启动

删除策略文件后,请在 UEFI 固件设置中重新启用安全启动,以维护其他安全启动保护。

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

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

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

可以通过在 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 2025 及更新的服务器平台。 但是,在Windows Server,启动会话要求为 2 次重新启动 (,而客户端版本) 为 3 次。 所有其他条件都是相同的。

如果重置或重新安装 Windows,该功能将在评估模式下全新启动。 将重置评估计数器,从一开始就重新开始过渡到强制。

需要更多帮助吗?

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

我们希望你提供有关此功能的反馈。 若要共享你的体验,请:

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

2. 在 步骤 2 - 选择类别 中,选择“ 安全和隐私 > 应用控制 ”。

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。