如何私下向客户端分发 windows kmdf 驱动程序

How to distribute a windows kmdf driver to clients privately

我对 windows 驱动程序开发还很陌生。 我已经编写了一个 KMDF windows 驱动程序,我能够使用 VS 部署测试将它部署到我的目标机器。它运行良好,现在我想将此驱动程序与使用此驱动程序的应用程序一起发布。

问题来了...我在 Google 上找不到任何告诉我们如何分发 KMDF 驱动程序(比如制作安装程序)的信息。此驱动程序是上层 class 过滤器驱动程序,仅我的应用程序需要它,因此不应将其发布到 windows 更新。

我的问题是如何制作类似安装程序的东西来分发此驱动程序?感谢您的任何建议或教程。


编辑 1 这是一个假设备驱动程序(意思是没有物理设备可以驱动)

通常,软件的设备驱动程序不会通过 Windows 更新推出。 Intel、AMD、NVIDIA 等供应商有例外,但这是因为这些公司是什么以及它们 popular/well-used 如何(它们将为此与 Microsoft 合作)。您不能只通过 Windows 更新推出您的驱动程序。

只要您要将它分发到使用现代版本 Windows x64 的机器上,您就需要一个数字签名来签署您的内核模式软件(为了记录,即使 Windows Vista x64 也会强制执行此要求)。目前,Windows 的 x86 版本不会出现此要求,但事实上,不签署内核模式软件是不道德的。

从 Windows 10 开始,在一个非常早发布的特定补丁上,要求从具有可以用于签署内核模式二进制文件的普通数字签名变为必须是 EV电子签名;要获得用于内核模式软件签名的 EV 数字签名,您无疑需要合法注册为公司(并且可能还需要公司银行帐户)。

有关此的更多信息,请参阅以下内容。

https://blogs.msdn.microsoft.com/windows_hardware_certification/2015/04/01/driver-signing-changes-in-windows-10/

这里有一个转折...对于使用安全启动的系统(新的现代系统现在默认启用它,这是一项安全功能),您需要将内核模式软件与-由微软自己签名。这将要求您通过在线门户上传您的内核模式软件与 Microsoft 共享,但您仍然需要 EV 数字签名才能进入该阶段。

有关 Microsoft 共同签名要求(取决于环境)的更多信息,请参阅以下内容:

https://www.osr.com/blog/2017/07/06/attestation-signing-mystery/

注意:请不要试图想出规避这一点的想法(例如,在客户端系统上启用测试模式,然后为您的驱动程序使用测试证书,或在依赖它的系统上禁用安全启动。 .. 这样的变通办法会以降低系统安全性的巨大代价为代价,在现实世界中永远不应将其用作解决此问题的方法。


对于实际安装设备驱动程序,您可以在 Win32 API 中以编程方式使用 .INF 文件,然后使用 StartService routine to start the service post-installation with the .INF. Also see: https://msdn.microsoft.com/en-us/library/aa376957%28v=vs.85%29.aspx

或者,您可以使用 CreateService routine and then start it with the StartService 例程自行注册服务(或重新启动并根据服务创建的标志在启动时加载它)。

请记住,有时使用服务管理器,您会在注册某些驱动程序类型(例如文件系统微过滤器)时错过重要的事情,您需要手动处理,否则它将无法工作。检查 .INF 并确保在使用服务管理器进行安装时需要完成的所有工作(如果您决定不依赖 .INF)。


希望这能帮助您到达目的地。