如何手动部署驱动程序服务?

时间:2015-02-16 22:47:04

标签: windows wdm

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

警告:有很多"研究工作的证明"先。如果你不想,你不必再阅读了。我只是详细地指出,我已经尝试了你应该做的事情,我已经尝试过MSDN所说的,并且我已经尝试过互联网上任何地方的任何人都曾建议过

tl;博士:预期方式是什么?

背景

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

你尝试了什么

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

    理想情况下,您会使用Visual Studio's capability to automatically deploy to a remote machine。不幸的是,它不起作用("发生了扩展错误"

  • 使用添加新硬件向导

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

    enter image description here

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

  • SC命令行实用程序

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

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

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

    enter image description here

    Windows将拒绝安装驱动程序:

    enter image description here

  • OSR&#strong>

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

    enter image description here

  • .INF设置文件

    理想情况下,你会deploy the Driver Package and install it by installing from the .inf。然后我可以右键单击INF,选择安装。但它没有用 - 它没有注册任何新的驱动程序服务。

  • .INF设置与DefaultInstall部分

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

      

    注意 driver package的INF文件不得包含INF DefaultInstall 部分

    您无法执行此操作的原因是 DefaultInstall 没有 AddService 指令。即使我们忽略了警告并尝试它仍然无法正常工作 - 它也没有注册任何新的驱动程序服务。

  • 。使用DefaultInstall.Services部分设置.INF

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

    enter image description here

    但是Windows声称驱动程序是无符号的:

    enter image description here

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

  • SetupAPI InstallHinfSection函数

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

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

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

    enter image description here

  • 使用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

    理想情况下,我会按照Installing an Unsigned Driver during 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.
    
  • 使用高级恢复选项禁用驱动程序签名实施

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

    enter image description here

    除了Windows启动后,仍然启用了驱动程序签名:

    enter image description here

  • 在BIOS中禁用SecureBoot

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

    enter image description here

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

哦,我的上帝三天就此了。我希望微软有人解释:

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

正确的方法

安装过滤器驱动程序服务的方法是什么 正确 ,而不是我尝试随机内容,重复上述内容(以及结束内容和结束内容)。 ?

奖金问题

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

Bonus Chatter

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

enter image description here

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

enter image description here

这就是驱动程序文件的签名有效且值得信赖的原因。

a random page on MSDN的一次性评论说,必须将测试证书添加到本地计算机商店中的两个位置:

  

用于在驱动程序文件中嵌入签名并签署test certificate driver package'scatalog file必须添加到

     

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

enter image description here

Windows 10 Technical Preview,64位

奖金阅读

1 个答案:

答案 0 :(得分:0)

如果您仍然不能且没有证书问题,我也这样做:

devcon install irpsender\irpsender.inf Root\irpsender

根\ 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。

HTH