如何手动部署或注册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
。不幸的是,您无法使用添加新硬件向导添加安装驱动程序包,因为添加新硬件向导仅适用于硬件(即它不适用于过滤器驱动程序):
向导知道这一点,因此不允许您安装任何驱动程序服务。
SC命令行实用程序
理想情况下,您可以使用带有 sc.exe
工具的服务控制管理器从提升的命令提示符手动注册驱动程序服务:
>sc create MyDriver binPath="C:\Drop\Driver\MyDriver.sys" type=kernel
>[SC] CreateService SUCCESS
不幸的是,即使驱动程序文件上有有效的数字签名:
Windows将拒绝安装驱动程序:
OSR&#strong>
理想情况下,人们会使用OSR's Driver Loader utility。但即使使用经过有效数字签名的驱动程序文件,驱动程序也不会安装:
.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]
部分。幸运的是,它实际上尝试安装驱动程序服务:
但是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
理想情况下,我会按照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.
使用高级恢复选项禁用驱动程序签名实施
理想情况下,我会使用高级恢复选项来禁用驱动程序签名实施:
除了Windows启动后,仍然启用了驱动程序签名:
在BIOS中禁用SecureBoot
理想情况下,在这个虚拟的Hyper-V计算机中,我会在其虚拟BIOS中禁用SecureBoot:
然后尝试禁用驱动程序签名策略。
哦,我的上帝三天就此了。我希望微软有人解释:
安装过滤器驱动程序服务的方法是什么 正确 ,而不是我尝试随机内容,重复上述内容(以及结束内容和结束内容)。 ?
为什么微软拒绝让开发人员的生活更轻松?
驱动程序文件使用有效的受信任证书进行签名。
签署.sys驱动程序文件的证书也位于本地计算机 受信任的根证书存储中:
这就是驱动程序文件的签名有效且值得信赖的原因。
对a random page on MSDN的一次性评论说,必须将测试证书添加到本地计算机商店中的两个位置:
用于在驱动程序文件中嵌入签名并签署test certificate driver package's的catalog file必须添加到
这解释了为什么我将证书添加到另一家商店:
Windows 10 Technical Preview,64位
答案 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