WDK驱动调试问题点滴

0
7

微软的文档:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/setting-up-a-usb-3-0-debug-cable-connection

1,调试驱动时要先打开testsiging,命令为: bcdedit /set testsigining on

2,bcdedit命令执行失败,说由于安全策略的保护,执行失败,解决方法:关掉Secure boot

3,新装的系统不能安装开发好的驱动,安装时设备管理器提示当前没有更好的驱动。这时 需确认我们使用的签名是否已经安装在测试机中,并安装在受信任的存储位置。
同时要使用 bcdedit -set testsigning on 命令来启用测试签名。测试签名启用以后有的驱动可以直接安装,有的驱动需要安装签名以后才能安装。
4,关掉secureboot之前先要关掉bitlocker,否则重启后无法进入系统。
5,dbgView或者用kernel debugger连接以后在windbg中,不能看到驱动打印的LOG,需增加如下注册表信息:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter,找到注册表的这个项,在我机器上是没有Debug Print Filter子项的,手动建好,在这个键下新建default的dword值,十六进制为0XF,然后重启电脑,就可以看到日志输出了。

UMDF消息显示的开关在:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\

6,USB kernel debugger连接不上的排查。
1)按WDK文件中所说,先在目标机上设置(test为任意名称, busparams后的字符串是用usbview查找调试线插入的USB根HUB上的信息):
bcdedit /debug on
bcdedit /dbgsettings usb targetname:test
bcdedit /set “{dbgsettings}” busparams 0.20.0
2)主控机上启动windbg时,第一次一定要使用admin权限启动与主控机CPU指令集一致版本(如X86,X64,ARM等),否则“USB Connection Device”不能自动安装。
3)做完之前的设置,打开windbg,选USB kernel debugger, windbg中如果显示:USB: Write opened,就说明已经建立了连接,不需要重启目标机。WDK的文档里说的重启,只是说明下次重启时它会自动连接。
4)如果不能建立连接,或者插入USB线以后PC机上的USB HUB不能正常工作(设备管理器中显示叹号)。需要关闭两端的USB口(调试用到的)的电源管理页中的 “允许计算机关闭此设备以节约电源”(清除该文字前边的勾选)
5)如果还有问题,可以把USB线换到其它USB口上试试,我就为此花过挺多时间。
6)记得一定要用USB3.0的交叉线。判断是否是USB3.0的方法:
USB3.0交叉线一旦插入,主控机上会显示“USB Connection Device”连接。非3.0版本的线插入后设备管理器里不会有反应。

7,WHCK问题排查:
测试:PCI Root Port Surprise Remove Test(PCI devcies only)(Reliability)时报告:

WDTF_PNP : Target: I/O LPC Controller – 0284 for Intel(R) 400 Series Chipset Family On-Package Platform Controller Hub PCI\VEN_8086&DEV_0284&SUBSYS_380C17AA&REV_00\3&11583659&0&F8 WexTraceInfo ThreadId=212 ProcessId=10440 TimeStamp=1798605197 LogSessionId=1 SessionTraceCount=293
Result: TestSurpriseRemove operation timed out waiting for IRP_MN_REMOVE_DEVICE.. WexTraceInfo ThreadId=212 ProcessId=10440 TimeStamp=4799338572 LogSessionId=1 SessionTraceCount=294

Result: Failed to receive IRP_MN_REMOVE_DEVICE after receiving IRP_MN_SURPRISE_REMOVAL. Ensure that there are no open handles or references to the test device (in user mode or in kernel mode) preventing IRP_MN_REMOVE_DEVICE from being sent. You may need to terminate any processes or services that may have open user mode handles to this device. ( 80004005 )

因为出错时的驱动名字里带HUB,一开始想到了调试用的USB,所以关掉kernel debug,没有用。去设备管理器找 LPC Controller – 0284 for Intel(R) 400 Series Chipset Family On-Package Platform Controller Hub这个设备,发现它有一个没有签名的驱动:msdmfilt.sys。
搞不清楚其出现的原因,将驱动版本回滚,该设备变成了PCI 标准ISA桥。我猜测该设备是PCI总线,而我的驱动挂在PCI总线上,所以需要测试它。再次测试时发现测试开始前有一个确认参数的窗口,其中有一项叫DriverVerfifierAdditionalDrivers,其值为:msdmfilt.sys,将其设置为空字符串,并将设备驱动恢复(以删除msdmfilt.sys) 。也一样会失败。
后来将系统重装,该测试用例可以通过。但我的功能不起作用,将系统更新,没有安装驱动的两个设备安好,需要的应用也都安好。确认功能正常以后,测试用例又会失败。
所以判断是新加入的应用及驱动有影响,将新加入的两个驱动禁用之后测试可以通过。但这两个驱动都是通过WHCK测试的。怀疑是我的使用方法有问题,对两个驱动做同一个WHCK测试,发现会失败。
它也有同样的提示,说可能设备被其它程序打开了。只是它不再提示PCI\VEN_8086&DEV_0 有问题,直接提示正在测试的驱动有这个问题。到此恍然大悟,该驱动被它的应用打开了(应用程序启动就会打开)。修改设置,使该程序开机时不自动启动。
再测试可以通过了。

<

发布回复

请输入评论!
请输入你的名字