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)

USB 对 ETW 日志记录的支持

USB 是将越来越多的外围设备连接到电脑的最普遍方式之一。 USB 主机电脑和 USB 外围设备的安装基础非常庞大,系统供应商、设备供应商和最终用户期望并要求 USB 设备在系统和设备级别完美运行。

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

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

Windows 7 中的 USB ETW 支持

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

我们在 Windows 7 中向 USB 主机控制器驱动程序和 USB 集线器驱动程序添加了 ETW 日志记录。 USB 主机控制器驱动程序层包括主机控制器端口驱动程序 (usbport.sys) 和微型端口驱动程序 (usbehci.sys、usbohci.sys和usbuhci.sys) 。 USB 集线器驱动程序层由 USB 集线器驱动程序 (usbhub.sys) 组成。 USB 驱动程序 ETW 事件提供程序包含在 Windows 7 的所有版本和 SKU 中。

  • USB 中心事件

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

  • USB 端口事件

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

Windows 8 中的 USB ETW 支持

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

  • USB Hub3 事件

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

  • USB UCX 事件

    启用 USB 事件收集时,USB UCX 事件提供程序会报告来自客户端驱动程序的 I/O,以及打开和关闭设备终结点和终结点流。 启用 StateMachine 关键字 (keyword) 后,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 实用工具识别系统能效问题。

使用 USB ETW
Windows 的 USB 事件跟踪