案例研究:使用 ETW 和 Netmon 解决未知 USB 设备的问题

本主题提供了一个示例,以说明如何使用 USB ETW 和 Netmon 对 Windows 无法识别 USB 设备进行故障排除。

对于此示例,我们插入了一个设备,该设备在设备管理器和其他用户界面 (UI) 部分中显示为未知设备。硬件 ID 为 USB\UNKNOWN。为了做进一步诊断,我们拔下了设备,开始 ETW 跟踪,并再次插入了设备。当设备显示为未知设备后,我们停止跟踪。

关于未知设备问题

为了调试未知 USB 设备问题,当用户将设备插入系统时,这有助于理解 USB 驱动程序堆栈枚举设备所执行的操作。有关 USB 枚举的信息,请参阅标题为 USB 堆栈如何枚举设备?的博客文章。

通常,如果 USB 驱动程序堆栈枚举设备失败,集线器驱动程序仍然会向 Windows 报告已插入设备,但是在设备管理器中会将设备标记为未知设备。设备的设备 ID 为 USB\VID_0000&PID_0000,硬件 ID 和兼容 ID 为 USB\UNKNOWN。以下事件会导致 USB 集线器驱动程序将 USB 设备枚举为未知设备:

  • 枚举过程中端口重置请求超时。
  • USB 设备的设置地址请求失败。
  • 对 USB 设备的设备描述符请求失败。
  • USB 设备描述符已损坏且验证失败。
  • 对配置描述符的请求失败。
  • USB 配置描述符已损坏且验证失败。

在 Windows 7 中,枚举失败的未知设备在设备管理器中标有故障代码 43

如果设备在设备管理器中标有故障代码 28,则设备会枚举成功,但是仍然是未知设备。此故障代码表示设备在枚举过程中未提供产品产品 ID 字符串,Windows 无法找到设备的匹配 INF 来安装驱动程序。

启动事件跟踪分析

由于这是因设备故障而造成的,我们建议你将 Netmon 与 USB 分析器结合使用来分析日志文件。

JJ151572.wedge(zh-cn,VS.85).gif查看事件跟踪日志

  1. 运行 Netmon,依次单击“文件”->“打开”->“捕获”,然后选择文件。
  2. 在“帧摘要”窗格中选择第一个事件,其中具有有关 SystemTrace 的说明。 此图像将显示在选择第一个事件后屏幕所呈现的外观。

    JJ151572.devicefailure_etl(zh-cn,VS.85).png

  3. 若要自定义 Netmon 显示的列,请右键单击列名称并选择“选择列”
  4. 第一个事件(标识为类型 SystemTrace)包含有关日志的常规信息。你可以通过在“帧详细信息”窗格中展开信息树,来查看诸如已丢失事件的数目和跟踪的开始时间等信息。

USB 设备摘要事件

事件 2 是日志中的第一个 USB 事件。此事件以及数个后续事件描述启动跟踪时连接到系统的 USB 主机控制器、集线器和设备。我们可将这一组事件称为设备摘要事件(或摘要事件)。如同第一个事件一样,摘要事件不描述驱动程序活动。摘要事件记录日志会话开始时的设备状态。其他事件表示总线上发生的活动、与客户端驱动程序或系统的交互,或是内部状态的变化。

USB 集线器和 USB 端口驱动程序都会记录摘要事件。记录事件的驱动程序在协议名称列中标识。例如,USB 端口驱动程序记录的事件具有 USBPort_MicrosoftWindowsUSBPORT 协议名称。USB 事件跟踪通常包含一系列端口摘要事件,后跟一系列集线器摘要事件。许多

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值