14

如何手动部署或注册 Windows 过滤器驱动程序?

警告:前面有很多“研究工作证明”。如果您不想阅读,则无需再阅读。我只是详细地指出,我已经尝试了你应该做的,我已经尝试了 MSDN 所说的,并且我已经尝试了 Internet 上任何地方的任何人所建议的一切。

tl; dr:预期的方式是什么?

背景

我正在测试将在 Visual Studio 2013 中开发的 64 位驱动程序部署到 64 位 Windows 机器上。我想用 Windows 注册驱动服务,然后启动它。

你试过什么

  • Visual Studio 2013 驱动程序部署功能

    理想情况下,您将使用Visual Studio 的功能自动部署到远程计算机。不幸的是,它不起作用(“发生了扩展错误”

  • 使用添加新硬件向导

    理想情况下,您应该使用 Windows添加新硬件向导(请参阅 MSDN 页Using the Add Hardware Wizard to Install a Driver Package。幸运的是,从 Windows 7 开始,Microsoft 从控制面板中删除了添加新硬件向导;需要您手动运行Hdwwiz.exe从提升的命令提示符。不幸的是,您不能使用添加新硬件向导来添加安装驱动程序包,因为添加新硬件向导仅适用于硬件(即它不适用于过滤器驱动程序):

    在此处输入图像描述

    向导知道这一点,因此不会让您安装任何驱动程序服务。

  • SC 命令行实用程序

    sc.exe理想情况下,您可以使用提升的命令提示符下的工具使用服务控制管理器手动注册驱动程序服务:

    >sc create MyDriver binPath="C:\Drop\Driver\MyDriver.sys" type=kernel
    >[SC] CreateService SUCCESS
    

    不幸的是,即使驱动程序文件上有有效的数字签名:

    在此处输入图像描述

    Windows 将拒绝安装驱动程序:

    在此处输入图像描述

  • OSR 的驱动程序加载器实用程序

    理想情况下,应该使用OSR 的 Driver Loader 实用程序。但即使使用经过有效数字签名的驱动程序文件,驱动程序也不会安装:

    在此处输入图像描述

  • .INF 设置文件

    理想情况下,您将部署驱动程序包并通过从.inf. 然后我可以右键单击 INF,选择Install。但它只是不起作用——它没有注册任何新的驱动程序服务。

  • 带有 DefaultInstall 部分的 .INF 设置

    理想情况下,您只需使用一个.INF文件作为DefaultInstall部分。Windows 只会执行DefaultInstall部分。不幸的是,MSDN 警告您不能将其用于驱动程序:

    注意驱动程序包 的 INF 文件不得包含 INF DefaultInstall部分

    你不能这样做的原因是因为DefaultInstall没有AddService指令。即使我们忽略警告并尝试无论如何它也不起作用 - 它不会注册任何新的驱动程序服务。

  • 带有 DefaultInstall.Services 部分的 .INF 设置

    虽然 MSDN 警告您不要使用 DefaultInstall 来注册驱动程序服务,但我们可以忽略它们并使用该[DefaultInstall.Services]部分。幸运的是,它实际上尝试安装驱动程序服务:

    在此处输入图像描述

    但 Windows 随后声称该驱动程序未签名:

    在此处输入图像描述

    实际上没有注册驱动程序服务。

  • SetupAPI InstallHinfSection 函数

    理想情况下,我可以使用 SetupAPI 运行与上述等效的命令行:

    >RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 C:\Drop\Driver\ipfw.inf
    

    除非驱动程序没有安装。函数返回成功;但 Windows 认为驱动程序未签名:

    在此处输入图像描述

  • 使用 BCDEDIT 启用 TESTSIGNING

    理想情况下,我会按照The TESTSIGNING Boot Configuration Option中的说明进行操作,该说明表示从提升的命令提示符运行:

    >Bcdedit.exe -set TESTSIGNING ON
    

    除了失败并出现错误:

    >Bcdedit.exe -set TESTSIGNING ON
    An error has occurred setting the element data.
    The value is protected by Secure Boot policy and cannot be modified or deleted.
    
  • 使用 BCDEDIT 打开 DEBUG

    理想情况下,我会按照在 Development and Test 期间安装未签名驱动程序的说明进行操作,该说明说要从提升的命令提示符运行:

    >bcdedit -debug on
    

    除非失败并出现错误:

    >bcdedit -debug on
    An error occurred while attempting to modify the debugger settings.
    The value is protected by Secure Boot policy and cannot be modified or deleted.
    
  • 使用高级恢复选项禁用驱动程序签名强制

    理想情况下,我会使用高级恢复选项来禁用驱动程序签名强制:

    在此处输入图像描述

    除非 Windows 启动驱动程序签名仍然启用:

    在此处输入图像描述

  • 在 BIOS 中禁用 SecureBoot

    理想情况下,在这台虚拟 Hyper-V 计算机中,我会在其虚拟 BIOS 中禁用 SecureBoot:

    在此处输入图像描述

    然后尝试禁用驱动程序签名策略。

哦,我的上帝,三天。我想请微软的人解释一下:

  • 不仅是在开发过程中测试驱动程序的正确方法
  • 但要详细解释为什么上述每次尝试都失败了

什么是正确的方法

而不是我尝试随机的事情,一遍又一遍(一遍又一遍。一遍又一遍),安装过滤器驱动程序服务的正确方法是什么?

奖金问题

为什么微软拒绝让开发人员的生活更轻松?

奖金喋喋不休

驱动程序文件使用有效、受信任的证书进行签名。

在此处输入图像描述

签署 .sys 驱动程序文件的证书也位于本地计算机 受信任的根证书存储中:

在此处输入图像描述

这就是驱动程序文件的签名有效且受信任的原因。

MSDN 上随机页面上的一条一次性评论说,必须将测试证书添加到本地机器存储的两个位置:

必须将用于在驱动程序文件中嵌入签名以及对驱动程序包的目录文件进行签名的测试证书添加到

这就解释了为什么我将证书添加到另一家商店:

在此处输入图像描述

Windows 10 技术预览版,64 位

奖金阅读

4

1 回答 1

0

如果你仍然不能并且没有证书问题,我已经这样做了:

devcon install irpsender\irpsender.inf Root\irpsender

其中 Root\irpsender 来自 .inf 文件:

[Standard.NT$ARCH$]
%irpsender.DeviceDesc%=irpsender_Device, Root\irpsender ; TODO: edit hw-id

我的方法虽然在一些较旧的 Win10 中成功但在 Win8.1 上不起作用 - 我创建了一个类似上面的服务并启动它;DriverEntry确实被调用了,没有别的。还拿到了

c:\DriverTest\Drivers>sc stop irpsender
[SC] ControlService FAILED 1052:

The requested control is not valid for this service.

可能是因为也没有指定硬件 ID。

高温高压

于 2020-11-10T19:20:33.253 回答