微软宣布,从2021年7月1日起,它将停止交叉签名驱动程序的功能。这实际上将使其无法为Windows 7、Windows 8和Windows 8.1系统(包括Server 2012 R2)发布新的或更新的驱动程序。这并不夸张。
对于想要发布Windows 10以外的Windows版本的驱动程序的开发人员来说,唯一可用的选择是让这些驱动程序通过HLK/WHQL测试。不幸的是,并不是所有的司机都有资格参加HLK/WHQL测试,即使是那些有资格的司机,让一些司机通过HLK/WHQL测试实际上也是不可能的。
我知道这听起来有点夸张。但这实际上是目前记录在案的计划。继续读下去。
我想我们都知道,Windows驱动程序需要经过数字签名才能安装和使用。截至今天,即2020年10月,本次签约有三个选项:
证明签名-这仅适用于Windows 10。您可以在Microsoft Partner Center Developer Dashboard上创建帐户。当您有一个想要向全世界发布的驱动程序包时,您可以使用代码签名证书对其进行签名,然后将其上载到仪表板,然后Microsoft会为您对该包进行签名。然后,您可以下载软件包并随心所欲地发布它。这是“有效的”,因为您的开发人员仪表板帐户明确地将您标识给Microsoft,并且Microsoft的签名允许安装您的驱动程序。
交叉签名-这仅适用于Windows 10之前的Windows版本。您可以使用代码签名证书和“交叉证书”对驱动程序包进行签名。这是“有效的”,因为您已经证明了您的身份,使颁发代码签名证书的证书颁发机构(证明级别差异很大)满意。交叉证书将证书颁发机构标识为Microsoft信任的证书颁发机构。您的证书和交叉证书一起允许安装您的驱动程序。
通过HLK(历史上称为WHQL)测试-这适用于所有版本的Windows。您可以安装并运行由Windows硬件实验室工具包(HLK)定义的测试,这说起来容易做起来难。HLK生成一个日志文件,您可以签署该文件并将其与驱动程序包一起上传到Microsoft Partner Center Developer Dashboard。仪表板检查HLK结果,如果一切顺利,您可以下载您的签名驱动程序包。这“起作用”的原因与证明签名起作用的原因相同:您的开发人员仪表板帐户明确地将您标识给Microsoft,并且Microsoft在您的驱动程序包上的签名允许安装您的驱动程序。
从2021年7月1日起,微软将取消选项2,交叉签名。这将使传递Hlk成为发布Windows 10以外的Windows版本驱动程序的唯一选择。
微软早在2019年7月就首次宣布了这一计划。坦率地说,我们都不相信。像许多这样的错误想法(记住“所有驱动程序都必须通过WHQL,否则他们不会在Windows Server上加载”),我们希望文档作者被误导和/或微软的政策人员提出这个想法来评估社区的反应。
自从宣布这一消息以来,我们OSR一直在与微软接触,试图确定前进的真正计划。早在2019年9月,我就写信给我在微软的一位同事:
但如果这是正确的,那就是一个巨大的错误。这基本上就是世界末日。这并不夸张。世界上绝大多数由第三方编写的驱动程序都必须安装在生产Win7或更高版本的系统上。如果我们不能交叉签名,也不能证明它们为…签名,那么这些驱动程序就必须安装在Win7或更高版本的生产系统上。我们如何编写将在非Win10系统上加载的新驱动程序?
虽然我们的朋友们肯定既关心又合作,但他们不能提供一个明确的声明,除了已经发表的内容之外,他们还没有说出任何其他的东西。
有一次我确实听到传言说证明签名将被扩展以支持Windows 10之前的Windows版本(回想一下,现在证明签名只适用于Windows 10)。现在我完全没有听到任何关于这种可能性的消息。
你们中的一些人可能会想:我们仍然可以跑着通过HLK,所以我们会没事的!我只能猜想,只有那些(A)已经跑/通过过高院,(B)从来没有费心尝试跑过高院的人,才会有这样的想法。
安装和运行HLK是一个重量级的、耗时的、通常是艰巨的、令人沮丧的、并且经常是令人恼火的武断的过程。它主要是为测试硬件组件的兼容性而设计的,并不是真的要验证潜在的Windows驱动程序的庞大生态系统。
许多类型的Windows驱动程序不符合HLK的测试条件。许多常见类型的Windows驱动程序(如许多筛选器驱动程序)不属于特定的测试类别,基本上会迫使测试团队选择一组任意的测试来运行并尝试通过。这相当于把一个正方形的钉子塞进一个圆孔里。例如,假设您有一组驱动程序,这些驱动程序实现了一项防止永久写入磁盘驱动器的功能,如Windows统一写入筛选器。你把整个复杂的驱动程序作为磁盘驱动器进行测试,对吗?很明显。或者不去。
一些类型的司机理论上有资格参加HLK测试,但由于HLK测试的特殊性,永远没有机会通过。这类驱动程序的一个很好的示例是文件系统隔离微筛选器。现有的HLK测试与许多这样的过滤器的目的固有地不兼容。仅举一个例子,考虑提供透明加密的隔离微过滤器的情况。这类驱动程序的一个共同特征是加密文件通常包括某种类型的元数据(组和密钥等)。HLK测试可能会写入一个文件,关闭该文件,然后查询该文件的分配大小。因为测试“知道”底层文件系统的分配策略,所以它认为它“知道”文件在磁盘上应该有多大。但是,我们的加密Miniffilter在执行其设计的工作时,通过为元数据分配空间来更改分配的文件大小。因此,测试失败。没有办法以使应用程序和测试都满意的方式更改此行为。
别搞错了:如果这一政策不改变,Windows驱动生态系统-以及世界各地的许多Windows大用户-将会陷入严重的麻烦之中。
Windows 8.1和Windows Server 2012 R2仍受到Microsoft的扩展支持,并将一直支持到2023年1月。微软对Windows Embedded 8和Windows Embedded 8.1的支持截止到2023年7月。
因此,Microsoft仍然支持这些版本的Windows,但IHV、ISV和OEM将无法根据此计划发布针对这些支持的操作系统版本的更新驱动程序。
如果这一提议不改变,使用这些操作系统版本的客户将会被彻底搞砸。多么?。让我举几个例子。
在过去的几年里,我们在OSR这里为面向Windows 10以外的Windows版本的特殊用途系统编写了全新的驱动程序,这些系统是用于医疗设备、国土安全硬件和实验室设备的嵌入式系统。
如果此建议不更改,我们将无法支持或更新这些驱动程序。所以…。“对不起,大型政府承包商…。你为政府建造的价值数百万美元的大型设备?我们知道您发现了错误,但由于Microsoft的政策,我们无法再更新驱动程序。“。
我们定期增强和支持商业客户在全球数十万个系统上安装的产品(毫不夸张)。为美国、加拿大、欧洲和整个亚洲的公司和政府提供知识产权保护和文档安全的产品。
如果此建议不更改,我们将无法更新这些驱动程序。“对不起,医疗保健提供者和大型金融机构!对不起,高科技公司!我们无法向您的文档安全系统添加功能或修复其中发现的任何错误。微软不让我们更新驱动程序。“。
我们从整个社区和我们自己的客户那里听到了响亮、清晰和持久的消息,即今天编写的绝大多数驱动程序需要在Windows 7之前的Windows版本上运行。
如果这一提议不改变,我们将无法更新这些驱动程序中的绝大多数。
我历来称赞微软的一件事是,他们愿意倾听社区的意见,并在必要时改变路线。
第一个例子是微软的计划,该计划要求使用EV证书向开发者仪表板提交HLK结果和驱动程序包。虽然这听起来可能是一个合理的要求,但在OSR这里,我们注意到这将使分布式组织的生活异常困难(如果不是不可能的话)。假设您的开发团队在英国,测试团队在美国。如果您的开发团队的管理人员安排了您的开发人员仪表板帐户,他们如何将EV证书(不可撤销地锁定到特定硬件令牌)提供给测试团队,以便测试团队可以提交HLK结果?它就是不起作用。
当我们发现这一点时,我们把这个问题引起了社会的注意。我们请OEM、IHV和ISV让他们的高管向微软提出这个问题。他们这么做了,政策也变了。
前面提到的另一个例子是,微软计划要求Windows Server系统上安装的所有驱动程序都要通过HLK。再一次,OEM、IHV和ISV社区大声而明确地表达了为什么这个计划可能是善意的,但却是不切实际的。政策被更改了。
要求驱动程序通过HLK才能在Windows 10之前的Windows版本上加载,实际上根本没有选择余地。
如果你同意这一点,提醒你的同事注意这个问题是至关重要的。向他们解释这将带来的痛苦。鼓励您的管理团队向其Microsoft联系人提出此问题。我们从过去的经验中知道,微软重视OEM、IHV和ISV的意见。我们从经验中知道,微软会听取对一些计划的抵制,这些计划在理论上听起来不错,但社区认为在实践中是行不通的。我们从经验中知道,当缺陷被发现时,微软将改变这些计划。
但你必须行动起来。你必须向你的同事和经理提出这个问题。帮助他们了解这个问题的紧迫性。你不能等到2021年7月这项政策全面生效时才采取行动。你必须现在就行动。