适用于 Windows 的 USB 事件跟踪概述

本主题为客户端驱动程序开发人员提供有关通用串行总线(USB)的跟踪和日志记录功能的信息。 为开发和调试 USB 设备的用户提供了此信息。 其中包括有关如何安装工具、创建跟踪文件和分析 USB 跟踪文件中的事件的信息。 本主题假定你已全面了解成功使用 USB 跟踪和日志记录功能所需的 USB 生态系统和硬件。

若要解释事件跟踪,还必须了解 Windows 中的 Windows USB 主机端驱动程序、官方 USB 规范和 USB 设备类规范

关于 Windows 的事件跟踪

Windows 事件跟踪(ETW)是操作系统提供的通用高速跟踪设施。 它使用在内核中实现的缓冲和日志记录机制,为用户模式应用程序和内核模式设备驱动程序引发的事件提供跟踪机制。 此外,ETW 还提供动态启用和禁用日志记录的功能,这使得无需重新启动或应用程序重启即可轻松地在生产环境中执行详细跟踪。 日志记录机制使用异步写入程序线程写入磁盘的每个处理器缓冲区。 此缓冲允许大规模服务器应用程序编写具有最小干扰的事件。

ETW 已在 Windows 2000 中引入。 此后,各种核心操作系统和服务器组件都采用了 ETW 来检测其活动。 ETW 现在是 Windows 平台上的关键检测技术之一。 越来越多的第三方应用程序使用 ETW 进行检测,有些应用程序利用 Windows 提供的事件。 ETW 也已抽象化到 Windows 预处理器(WPP)软件跟踪技术中,该技术提供了一组易于使用的宏,用于跟踪 在开发过程中进行调试的 printf 样式消息。

ETW 已显著升级 Windows Vista 和 Windows 7。 最重要的新功能之一是统一事件提供程序模型和 API。 简言之,新的统一 API 将日志记录跟踪和写入事件查看器合并为事件提供程序的一个一致且易于使用的机制。 同时,ETW 添加了多个新功能,以改善开发人员和最终用户体验。

有关 ETW 和 WPP 的详细信息,请参阅适用于 Windows 的事件跟踪和事件跟踪(ETW)。

对 ETW 日志记录的 USB 支持

USB 是将不断增加的外围设备连接到电脑的最普遍手段之一。 USB 主机电脑和 USB 外围设备以及系统供应商、设备供应商和最终用户都期望并要求 USB 设备在系统和设备级别完美运行。

USB 设备的大型安装基础和激增已发现 Windows USB 软件堆栈、USB 主机控制器和 USB 设备之间的兼容性问题。 这些兼容性问题会导致客户出现问题,例如设备操作故障、系统挂起和系统崩溃。

如果没有直接访问系统和/或设备,或者在某些情况下,系统故障转储,就很难或不可能调查和调试 USB 设备问题。 即使完全访问硬件和故障转储,提取相关信息也是一种时间密集型技术,只有少数核心 USB 驱动程序开发人员才知道。 可以使用硬件或软件分析器调试 USB 问题,但它们非常昂贵,并且仅可供一小部分专业人员使用。

USB ETW 支持

ETW 提供了一种事件日志记录机制,USB 驱动程序堆栈可以利用该机制来帮助调查、诊断和调试 USB 相关问题。 USB 驱动程序堆栈 ETW 事件日志记录支持 USB 驱动程序堆栈中现有临时日志记录机制提供的大多数或所有调试功能,没有任何限制。 这可以简化 USB 相关问题的调试,从长远来看,这应该提供更可靠的 USB 驱动程序堆栈。

我们向 USB 主机控制器驱动程序和 USB 中心驱动程序添加了 ETW 日志记录。 USB 主机控制器驱动程序层包括主机控制器端口驱动程序(usbport.sys)和微型端口驱动程序(usbehci.sys、usbohci.sys和usbuhci.sys)。 USB 中心驱动程序层由 USB 中心驱动程序(usbhub.sys)组成。

  • USB 中心事件

    启用 USB 事件收集时,USB 中心事件提供程序将报告 USB 中心的添加和删除、所有中心的设备摘要事件以及端口状态更改。 可以使用这些事件来确定大多数设备枚举失败的根本原因。

  • USB 端口事件

    启用 USB 事件收集时,USB 端口事件提供程序从客户端驱动程序报告 I/O、打开和关闭设备终结点,以及微型端口状态转换(如微型端口启动和停止)。 记录的 I/O 包括物理 USB 端口状态的请求。 物理 USB 端口上的状态转换是核心 USB 驱动程序堆栈中活动的关键发起方之一。

Windows 提供 USB 驱动程序堆栈来支持 USB 3.0 设备。 Microsoft提供的 USB 3.0 驱动程序堆栈由三个驱动程序组成:Usbxhci.sys、Ucx01000.sys和Usbhub3.sys。 所有三个驱动程序协同工作,为大多数 USB 3.0 主机控制器向 Windows 添加本机支持。 新的驱动程序堆栈支持 SuperSpeed、高速、全速和低速设备。 通过事件跟踪,USB 3.0 驱动程序堆栈提供主机控制器及其连接到的所有设备的精细活动视图。

  • USB Hub3 事件

    启用 USB 事件收集时,USB Hub3 事件提供程序报告 USB 中心的添加和删除、所有中心的设备摘要事件、端口状态更改以及 USB 设备和中心的电源状态。 端口状态更改是物理 USB 端口上的状态转换,是核心 USB 驱动程序堆栈中活动的关键发起方之一。 Hub3 报告枚举过程的阶段,这指向大多数设备枚举失败的根本原因。 启用 StateMachine 关键字后,Hub3 会报告软件设备、中心和端口对象的内部状态机活动,从而更深入地了解驱动程序的逻辑。

  • USB UCX 事件

    启用 USB 事件收集时,USB UCX 事件提供程序从客户端驱动程序报告 I/O,并打开和关闭设备终结点和终结点流。 启用 StateMachine 关键字后,UCX 会报告主机控制器和终结点对象的内部状态机活动,从而更深入地了解驱动程序的逻辑。

  • USB xHCI 事件

    启用 USB 事件收集时,USB xHCI 事件提供程序报告系统的 xHCI 控制器的属性和 xHCI 操作的低级别详细信息。 xHCI 报告 xHCI 硬件发送到和完成的命令请求,包括特定于 xHCI 的完成代码。

本节内容

主题 说明
如何使用 Logman 捕获 USB 事件跟踪 本主题提供有关使用 Logman 工具捕获 USB ETW 事件跟踪的信息。 Logman 是内置于 Windows 中的跟踪工具。 可以使用 Logman 将事件捕获到事件跟踪日志文件中。
在 USB ETW 跟踪中使用活动 ID GUID 本主题提供有关活动 ID GUID 的信息、如何在事件跟踪提供程序中添加这些 GUID,以及如何在 Netmon 中查看它们。
Netmon 中的 USB ETW 跟踪 可以使用Microsoft网络监视器(也称为 Netmon)查看 USB ETW 事件跟踪。 Netmon 不会自动分析跟踪。 它需要 USB ETW 分析器。 USB ETW 分析器是使用网络监视器分析器语言(NPL)编写的文本文件,用于描述 USB ETW 事件跟踪的结构。 分析器还定义特定于 USB 的列和筛选器。 这些分析器使 Netmon 成为分析 USB ETW 跟踪的最佳工具。
将 Xperf 与 USB ETW 配合使用 本主题介绍如何将 Xperf 与 Netmon 配合使用来分析 USB 跟踪数据。
USB ETW 和电源管理 本主题简要概述了如何使用 ETW 来检查 USB 选择性暂停状态,并使用 Windows PowerCfg 实用工具识别系统节能问题。