Windows 10 版本 1607(又名周年更新)现在正在执行更严格的内核驱动程序认证,该认证已于 2015 年宣布为 Windows 10 的要求。新规则是所有 Windows 10 驱动程序都必须由 Microsoft 进行数字签名,不再进行交叉签名!内核驱动程序开发人员现在必须使用扩展验证 (EV) 代码签名证书,并将其驱动程序提交到 Windows 硬件开发人员中心仪表板门户,驱动程序将在通过某些测试后由 Microsoft 进行签名。
但是,这条规则也有例外。交叉签名的内核驱动程序仍然被接受Windows 10 版本 1607如果出现以下情况是真的:
- 驾驶员签署了 2015 年 7 月 29 日之前颁发的证书
- 驱动程序是启动驱动程序
- 安全启动已关闭
- Windows 10 版本 1607 系统已升级而不是直接安装
- 设置了一个秘密注册表项,允许交叉签名的驱动程序即使在启用了安全启动的系统上也能加载
在我的公司,我们确实遇到了这样的问题:在安装了全新 Windows 10 版本 1607 的系统上,现在有多个驱动程序被禁用,甚至某些英特尔驱动程序也受到影响。此外,由于数字签名错误,使用启用了安全启动的 TianoCore UEFI BIOS 的高度安全的 KVM 虚拟机现在不会加载 VirtIO 网络和气球驱动程序。
我可以确认,驱动程序在禁用安全启动的系统上以及在升级(就地)到版本 1607 的 Windows 10 系统上(即使启用了安全启动)都能正常工作。
现在我想知道微软在下文中公布的秘密注册表的名称和值是什么视频拍摄于 00 时 11 分 00 秒:
第 9 频道 - Plugfest28 - Windows 客户端和服务器上的驱动程序认证
... 最后我们实际上会有一个注册表项... 这个注册表项... 您知道... 仅用于测试,所以我们绝对不希望您... 在安装驱动程序时设置此注册表项... 注册表项基本上模仿了与您升级系统相同的行为...
微软从未公布过这个密钥,因为以下原因OSR 的 ntdev 列表中的消息我相信这种事永远不会发生:
我不想这么说,但既然你问了:注册表项信息仅在保密协议下可用。这意味着它最终可能会出现在很多网上的地方,但在此之前我们不会在这里讨论它。
这让我想到了我的超级用户实际问题:
什么是秘密注册表项,它告诉 Windows 10 版本 1607 它是从以前的版本升级而来的?
答案1
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CI\Policy]
"UpgradedSystem"=dword:00000001
- https://www.geoffchappell.com/notes/security/whqlsettings/index.htm
- https://forums.mydigitallife.net/threads/windows-10-anniversary-update-digital-signature-question.69970/#post-1272392
博文和论坛帖子相互印证。我在从 1903 升级的 Windows 10 版本 1909 计算机上添加了以下注册表值(因此,适用 1607 中的限制)。
瞧瞧……它成功了。之前,驱动程序会自动安装并出现在设备管理器中,尽管会出现经常出现的“代码 52”警告。现在这个错误消失了。
我是 Linux 用户,不是 Windows 专家。我以前的(幼稚的)经验告诉我,修改注册表可能会导致问题,所以我真的不知道添加此注册表值会带来什么样的外部影响。我将改为参考 Geoff Chappell 的博客文章,因为他似乎知道自己在写什么;至少到目前为止,添加此注册表值似乎是无害的。
答案2
您可以尝试 TESTSIGNING 启动配置选项
Bcdedit.exe -set TESTSIGNING ON
Make sure to disable the Secure Boot and boot to OS to execute bcedit commands, once done you can reboot to OS with secure boot enabled
TESTSIGNING 启动配置选项确定 Windows Vista 及更高版本的 Windows 是否会加载任何类型的测试签名内核模式代码。默认情况下不设置此选项,这意味着在 64 位版本的 Windows Vista 及更高版本的 Windows 上不会默认加载测试签名内核模式驱动程序。
注意:更改 TESTSIGNING 启动配置选项后,请重新启动计算机以使更改生效。