通用串行总线 (USB) 提供可扩展的即插即用串行接口,确保外围设备的标准、低成本的连接。 USB 设备包括键盘、鼠标、游戏杆、打印机、扫描仪、存储设备、调制解调器、视频会议摄像头等。USB-IF 是一个特别兴趣组 (SIG),负责维护官方 USB 规范、测试规范和工具。
Windows 操作系统为 USB 主控制器、集线器以及符合官方 USB 规范的设备和系统提供本机支持。 Windows 还提供编程接口,用于开发可与 USB 设备通信的设备驱动程序和应用程序。
注意: 适用于设备生成器的 USB 图标适用于驱动程序开发人员的 USB 图标适用于应用开发人员的 USB 图标USB HCK 认证图标。
下面是这部分专栏的详细内容列表,每个标题下面会有简单的说明,然后根据这些标题来进行每一篇主题的编写。
Windows 中的 USB
- Windows 对 USB type C 连接器的支持:适用于想要使用 USB 类型 C 连接器构建 Windows 系统的 OEM。
- 通用串行总线 4 (USB4) :为 OEM、IHV 和芯片供应商提供支持 USB4 的 Windows 系统,以及有关 USB4 连接管理器的信息、促进调试和启动过程。
- USB 常见问题解答:驱动程序开发人员提出的有关 USB 堆栈和 USB 支持的功能的常见问题。
- 适用于 USB 设备的 Microsoft OS 描述符:Windows 定义了 MS OS 描述符,当连接到运行 Windows 操作系统的系统时,该描述符允许更好地枚举设备。
创建适用于 Windows 的 USB 驱动程序或应用
USB 驱动程序开发过程简介,主要介绍在为设备提供 USB 驱动程序时如何选择最适合的模型已经开发种可能遇到的问题。
编写 USB 客户端驱动程序(KMDF、UMDF)
- 本部分包含有关使用 Microsoft Visual Studio 附带的 USB 模板编写第一个用户模式和内核模式 USB 驱动程序的教程。
- USB 客户端驱动程序开发入门
编写 USB 主控制器驱动程序
如果要开发不符合规范的 xHCI 主控制器或开发自定义的非 xHCI 硬件 (例如虚拟主机控制器) ,则可以编写与 UCX 通信的主控制器驱动程序。 例如,可以考虑支持 USB 设备的无线坞。 电脑通过无线坞与 USB 设备通信,使用基于 TCP 的 USB 作为传输方式。
为 USB 设备编写功能控制器驱动程序
可以开发控制器驱动程序,用于处理由主机发送到设备的所有 USB 数据传输内容和命令。 此驱动程序可以与 Microsoft 提供的 USB 功能控制器扩展 (UFX) 通信。
- 为 USB 功能控制器开发 Windows 驱动程序
- USB 函数类扩展 (UFX) 参考
编写 USB type C 连接器驱动程序
Windows 10 引入了对新 USB 连接器:USB type C 的支持。 可以为连接器编写驱动程序,以便与 Microsoft 提供的类扩展模块UcmCx 通信,以便处理与类型 C 连接器相关的场景,例如,哪些端口支持类型 C、哪些端口支持功率输出。
- 为 USB 类型 C 连接器开发 Windows 驱动程序
- USB 连接器管理器类扩展 (UcmCx) 参考
编写 USB 双角色控制器驱动程序
Windows 10 现在支持 USB 双角色控制器。 Windows 包含适用于 ChipIdea 和 Synopsis 控制器的内置客户端驱动程序。 对于其他控制器,Microsoft 提供一组编程接口,方便双角色类扩展 (UrsCx) 及其客户端驱动程序互相通信,从而处理双角色控制器的角色切换功能。
USB 双角色驱动程序堆栈体系结构
USB 双角色控制器驱动程序编程参考
编写用于模拟设备的 USB 驱动程序
可以开发模拟通用串行总线 (USB) 主机控制器驱动程序和连接的虚拟 USB 设备。 这两个组件组合成单个 KMDF 驱动程序,该驱动程序可以与 Microsoft 提供的 USB 设备模拟类扩展 (UdeCx) 通信。
开发模拟 USB 设备 (UDE) 的 Windows 驱动程序
模拟 USB 主控制器驱动程序编程参考
适用于开发 USB 驱动程序的 WDF 扩展
- USB 连接器管理器类扩展 (UcmCx) 参考
Ucmmanager.h
- USB 主控制器 (UCX) 参考
Ucxclass.h
Ucxcontroller.h
Ucxroothub.h
Ucxusbdevice.h
Ucxendpoint.h
Ucxsstreams.h
- USB 函数类扩展 (UFX) 参考
Ufxbase.h
Ufxclient.h
Ufxproprietarycharger.h
编写 UWP 应用
- 与 USB 设备交谈,从头到尾:提供有关在 UWP 应用中实现 USB 功能的分步说明。 若要为 USB 设备编写此类应用,需要 Visual Studio 和 Microsoft Windows 软件开发工具包 (SDK) 。
- Windows.Devices.Usb:UWP 命名空间编程参考。
编写 Windows 桌面应用
- 编写 WinUSB 应用程序:描述应用程序如何调用 WinUSB Functions 来与 USB 设备通信。
- WinUSB 函数
Winusb.h
Usbioctl.h
- 常见编程方案:驱动程序或应用为与 USB 设备通信而执行的常见任务列表。 快速了解每个任务所需的编程接口。
通过 Windows 测试 USB 设备
Microsoft USB 测试工具 (MUTT) 设备的概述
获取相关工具的信息,这些工具可以用来测试 USB 硬件或软件、捕获操作和其他系统事件的跟踪,以及观察 USB 驱动程序堆栈如何响应客户端驱动程序或应用程序发送的请求。
阅读硬件认证工具包中提供的测试的概述。硬件供应商和设备制造商可以通过这些测试准备其 USB 设备和主控制器,以便提交 Windows 硬件认证。
通用串行总线 4 (USB4™)
- 通用串行总线 4 (USB4™) :为 OEM、IHV 和芯片供应商提供支持 USB4 的 Windows 系统,以及有关 USB4 连接管理器的信息、促进调试和启动过程。
- Windows 中的 USB4 连接管理器简介:USB4 域中的连接管理器负责 USB4 域的枚举、配置和管理。
- 通用串行总线 4 (USB4™) 设计详细信息和一般要求:高级设计和用户体验要求。
- 通用串行总线 4 (USB4™) 所需的测试:HLK 要求并非旨在为 USB4 功能集提供完整的端到端功能测试覆盖。 建议你对重要的使用方案进行全面验证。
USB 的其他资源
- 官方 USB 规范:提供 USB 协议的完整技术详细信息。
- Microsoft Windows USB Core 团队博客:查看 Microsoft USB 团队撰写的文章。 此博客重点介绍 Windows USB 驱动程序堆栈,该堆栈适用于 Windows 电脑中的各种 USB 主控制器和 USB 集线器。 USB 客户端驱动程序开发人员和 USB 硬件设计人员的有用资源,用于了解驱动程序堆栈实现、解决常见问题,并说明如何使用工具收集跟踪和日志文件。
- OSR Online 列表 - ntdev:由 OSR Online 为内核模式驱动程序开发人员管理的讨论列表。
- Windows 硬件开发人员中心:基于开发人员提出的常见问题的其他资源,开发人员不熟悉开发适用于 Windows 操作系统的 USB 设备和驱动程序。
适合学习的 USB 硬件
- MUTT 设备:MUTT 和 SuperMUTT 设备以及随附的软件包集成到 HCK USB 测试套件中。 它们提供的自动化测试可以在 USB 控制器、设备和系统的开发周期中使用,尤其是在进行压力测试时使用。
- OSR USB FX2 学习工具包:如果你不熟悉 USB 驱动程序开发。 此工具包最适合学习本文档集中包括的 USB 示例。 可以从 OSR Online 商店获取学习工具包。
了解 Microsoft 提供的 USB 驱动程序
- Windows 中的 USB 设备端驱动程序:介绍 USB 功能堆栈的体系结构。
- Windows 中的 USB 主机端驱动程序:概述通用串行总线 (USB) 驱动程序堆栈体系结构。 Microsoft 提供驱动程序的核心堆栈,这些驱动程序可以与连接到 EHCI 和 xHCI 控制器的设备互操作。
- USB-IF 设备类驱动程序:列出 Microsoft 为支持的 USB 设备类提供的驱动程序。 Windows 为许多经 USB-IF 批准的设备类、音频、大容量存储等提供随机设备类驱动程序。
- USB 泛型函数驱动程序 -- WinUSB:WinUSB 是 USB 设备的通用驱动程序,自 Windows Vista 起的所有 Windows 版本都附带此驱动程序。 Windows 提供的 Winusb.sys 可以作为自定义设备的功能驱动程序加载,以及作为复合设备的函数加载。
- 复合设备的 USB 通用父驱动程序 -- Usbccgp:具有多个功能的 USB 设备的父驱动程序。 Usbccgp 为每个这样的功能创建物理设备对象 (PDO)。 这些单独的 PDO 管理其各自的 USB 功能驱动程序,这些驱动程序可以是 Winusb.sys 驱动程序或 USB 设备类驱动程序。
Windows 10:USB 的新增功能
本主题重点介绍 Windows 10 中通用串行总线 (USB) 的新功能和改进。
- UCSI 驱动程序扩展从 Windows 10 版本 1809 开始,添加了适用于 UCSI (UcmUcsiCx.sys) 的新类扩展,该扩展以与传输无关的方式实现 UCSI 规范。 只需编写极少量的代码,驱动程序(即 UcmUcsiCx 的客户端)即可通过非 ACPI 传输来与 USB 类型 C 硬件通信。 本主题介绍 UCSI 类扩展提供的服务,以及客户端驱动程序的预期行为。
- USB 类型 C 端口控制器接口
Windows 10版本 1703 提供了支持通用串行总线类型 C 端口控制器接口规范的类扩展 (UcmTcpciCx.sys) 。 USB 类型 C 连接器驱动程序不需要保留任何内部的 PD/类型 C 状态。 管理 USB C 型连接器和 USB 电源输送 (PD) 状态机时存在的复杂性由系统处理。 你只需编写一个客户端驱动程序,以便通过该类扩展将硬件事件传送给系统即可。
USB Type-C 端口控制器接口驱动程序类扩展参考
- USB 双角色支持。
Windows 现在支持 USB 双角色控制器。 Windows 包括的随机客户端驱动程序适用于 ChipIdea 和 Synopsys 控制器。 对于其他控制器,Microsoft 提供一组编程接口,方便双角色类扩展 (UrsCx) 及其客户端驱动程序互相通信,从而处理双角色控制器的角色切换功能。
有关此功能的详细信息,请参阅:
USB 双角色驱动程序堆栈体系结构
USB 双角色控制器驱动程序编程参考
- 用于开发 USB Type-C 连接器驱动程序的新编程接口集。
此版本引入了对 USB 3.1 规范中定义的 USB 类型 C 的本机支持。 此功能允许设备使用可逆连接器、对称电缆、更快的充电和通过 USB 电缆运行的备用模式。 这些编程接口允许你为连接器编写一个驱动程序, (在本部分中称为客户端驱动程序) ,该驱动程序与 Microsoft 提供的类扩展模块通信:UcmCx,用于处理与 Type-C 连接器相关的方案,例如,哪些端口支持 Type-C,哪些端口支持供电。
为 USB 类型 C 连接器开发 Windows 驱动程序
USB 连接器管理器类扩展 (UcmCx)
- 用于开发仿真主机控制器和连接的虚拟设备的新编程接口集。
Windows 10 引入了对模拟设备的支持。 现在可以开发模拟通用串行总线 (USB) 主控制器驱动程序和连接的虚拟 USB 设备。 这两个组件组合成单个 KMDF 驱动程序,该驱动程序可以与 Microsoft 提供的 USB 设备模拟类扩展 (UdeCx) 通信。
开发模拟 USB 设备 (UDE) 的 Windows 驱动程序
模拟 USB 主控制器驱动程序编程参考
- 用于开发 USB 主机控制器驱动程序的新编程接口集。
如果硬件不符合 xHCI 规范,或者正在编写虚拟主机控制器,例如通过 TCP 连接将 USB 流量路由到连接到设备的外围设备的控制器,则可以开发主机控制器。 主控制器驱动程序是 USB 主机控制器扩展的客户端,USB 主控制器扩展是系统提供的驱动程序,遵循框架类扩展模型。 在 Microsoft USB 3.0 驱动程序堆栈中,UCX 提供的功能可帮助主机控制器驱动程序管理 USB 主机控制器设备。
- 为 USB 主控制器开发 Windows 驱动程序
- USB 主控制器扩展 (UCX) 参考
用于开发 USB 功能控制器驱动程序的新编程接口集。
可以编写与 USB 函数类扩展通信的客户端驱动程序, (UFX) 并实现特定于控制器的操作。 UFX 处理所有 USB 功能控制器通用的 USB 功能逻辑。
- Windows 中的 USB 设备端驱动程序
- USB 功能客户端驱动程序使用的 UFX 对象和句柄
- 函数控制器客户端驱动程序的任务
- UFX 编程参考的用户模式服务
- UFX 编程参考的 USB 函数类驱动程序
- USB 功能控制器客户端驱动程序编程参考
- 用于支持专有充电器的 USB Filter驱动程序
- 改进了 USB CDC (串行) 设备的体验。
允许符合 USB 通信设备类 (Class_02 & SubClass_02) 的设备使用 Usbser.sys 驱动程序来处理Windows 10。 设备制造商不再需要编写自定义 INF 来安装该驱动程序。USB 串行驱动程序 (Usbser.sys)
Windows 8.1:USB 的新增功能
Windows 8.1 中通用串行总线 (USB) 的新增功能和改进包括:用于开发 UWP 应用的 Windows 运行时 USB API Windows 运行时提供了一个新的命名空间:Windows.Devices.Usb 编写适用于 USB 设备的应用 (UWP 应用) 的简要概述。 通过使用 命名空间,可以编写与自定义 USB 设备通信的 UWP 应用。
- 与 USB 设备通信,从开始到完成(UWP 应用)
- 如何将 USB 设备功能添加到应用部件清单
- 如何连接到 USB 设备(UWP 应用)
- 如何发送 USB 控制传输(UWP 应用)
- 如何发送 USB 中断传输请求(UWP 应用)
- 如何将发送 USB 大容量传输请求(UWP 应用)
- 如何获取 USB 描述符(UWP 应用)
- 如何选择 USB 接口设置(UWP 应用)
这些示例演示如何使用 Windows.Devices.Usb 命名空间。
用于改进设备枚举的 Microsoft OS 2.0 描述符
Microsoft OS 2.0 描述符改进了设备标识和驱动程序安装体验。
MS OS 2.0 描述符规范提供以下改进:
- 定义新的 BOS 设备功能描述符,以允许设备返回特定于平台的属性。 BOS 描述符是由 USB 版本 2.1 及更高版本的标准 USB 规范定义的标准描述符,因此检索是正常且预期的枚举步骤,不应导致意外的设备行为。
- 允许将描述符的范围限定为整个设备、特定配置或函数。
- 允许设备返回多个描述符集,其中每个集适用于特定范围的 Windows 版本。 这使设备能够根据所附加到的系统上的 Windows 版本以不同的方式枚举。
- 更快的恢复:设备可以识别其恢复时间,从而缩短暂停状态的时间。
WinUSB 的常时等时支持
Microsoft 提供的 WinUSB (内核模式驱动程序) 现在支持与 USB 设备的常时等量终结点进行传输;同时用户模式 DLL Winusb.dll 公开 Windows 桌面应用可用于启动此类传输的 WinUSB 函数。
USB 驱动程序堆栈改进
在 Windows 8.1 中,USB 3.0 和 2.0 驱动程序堆栈的性能和可靠性都得到了提高。
- 对于支持 InstantGo 的较新平台,S0 中的总体系统功耗可能较低。 对于此类系统,即使是 USB 设备在选择性挂起时消耗的几毫瓦,也开始重要。 为了优化新系统的电源,我们实现了 USB 2.0 堆栈的 D3cold,并 Usbccgp.sys 并改进了 USB 3.0 驱动程序堆栈的Windows 8实现。
- 在没有安装驱动程序的情况下,更好的电源管理。 USB 驱动程序堆栈现在挂起 USB 端口,如果集线器是唯一连接到控制器的设备,该端口会导致集线器挂起。
- DPC 性能已得到改进,以避免监视器超时崩溃。
- 设备现在可以比 USB 2.0 规范中指定的默认 10 毫秒更快地恢复。 此外,主机控制器驱动程序断言恢复信号的时间少于 USB 2.0 规范中所需的 20 毫秒。
- USB 3.0 驱动程序堆栈现在在执行控制、批量和常时等量数据传输时更加可靠。
硬件认证工具包 (HCK) 中的 USB 测试
硬件认证工具包 (HCK) 中的这些 USB 测试已得到改进。 设备枚举测试现在有一个新参数,该参数使用简化的拓扑在测试期间减少了手动干预。 暂停测试已改进日志记录功能。
- USB 公开的端口控制器测试
- USB 集线器公开的端口测试 USB
- 中心选择性挂起测试
- USB 公开的端口系统测试
- USB 选择性挂起测试 (xHCI)
- USB 3.0 挂起测试
MUTT 和 SuperMUTT 设备现在是 USB-IF 合规性设备。 设备和随附的软件包集成到 HCK USB 测试套件中。 它们提供的自动化测试可以在 USB 控制器、设备和系统的开发周期中使用,尤其是在进行压力测试时使用。
Windows 8:USB 的新增功能
适用于 USB 3.0 设备的新驱动程序堆栈
Windows 8 提供了新的 USB 驱动程序堆栈来支持 USB 3.0 设备。 新堆栈包括当 USB 3.0 设备连接到 xHCI 主控制器时 Windows 加载的驱动程序。 新驱动程序基于 内核模式驱动程序框架 (KMDF) 并实现 USB 3.0 规范中定义的功能。 新驱动程序如下所示:
- Usbxhci.sys
- Ucx01000.sys
- Usbhub3.sys
新的驱动程序堆栈保持与在早期版本的 Windows 操作系统上生成和测试的现有客户端驱动程序的兼容性。
新堆栈支持的功能
USB 3.0 设备的 USB 驱动程序堆栈支持许多新功能。 某些功能可由客户端驱动程序配置。 这些功能如下所示:
- 批量终结点的静态流。
流使客户端驱动程序能够执行到单个批量终结点的多次数据传输。 适用于 Windows 8 的 Windows 驱动程序工具包 (WDK) 提供新的设备驱动程序接口 (DDI) ,允许客户端驱动程序在批量终结点中打开最多 255 个流。 打开流后,客户端驱动程序可以执行与特定流之间的数据传输。
- 链式 MDL
客户端驱动程序可以在 MDL 链中指定有效负载,而不是连续缓冲区。 这允许在物理内存中分段传输缓冲区,从而消除对缓冲区的数量、大小和对齐的限制。 使用链式 MDL 可以提高数据传输期间的性能,因为它避免了双重缓冲。
- 复合设备的函数暂停和远程唤醒。
该功能使复合设备的功能能够独立于其他功能进入和退出低功率状态。 函数驱动程序还可以请求设备启动的远程唤醒。 此类请求必须由复合设备的父驱动程序处理。 Microsoft 提供的父驱动程序 (Usbccgp.sys) 支持功能挂起和远程唤醒功能。 Windows 8的 WDK 提供允许替换父驱动程序实现这些功能的 DDI。
USB 客户端驱动程序的客户端协定版本
客户端协定版本标识客户端驱动程序在向 USB 驱动程序堆栈发送请求时的规则集。 否则可能会导致意外行为。
打算将 USB 驱动程序堆栈的功能用于 3.0 设备的客户端驱动程序必须使用 USBD_CLIENT_CONTRACT_VERSION_602 的客户端协定版本来标识自身。 需要这样的客户端驱动程序才能注册到 USB 驱动程序堆栈。 注册后,客户端驱动程序必须查询基础 USB 驱动程序堆栈,以确定堆栈是否支持所需的功能。 为了便于执行这些操作,WDK 中包括了以下特定于 KMDF 的方法和 WDM 例程,以便Windows 8:
用于分配和生成 URL 的新例程
Windows 8 提供了用于分配、格式化和释放 URL 的新例程。 URB 结构由 USB 驱动程序堆栈分配。 如果基础堆栈是新的 USB 驱动程序堆栈,则 URB 与不透明的 URB 上下文配对。 USB 驱动程序堆栈使用 URB 上下文来改进 URB 跟踪和处理。 有关例程的详细信息,请参阅 分配和生成 URL。
新例程如下所示:
- USBD_UrbAllocate
- USBD_IsochUrbAllocate
- USBD_SelectConfigUrbAllocateAndBuild
- USBD_SelectInterfaceUrbAllocateAndBuild
- USBD_UrbFree
- USBD_AssignUrbToIoStackLocation 例程将 URB 与 IRP 相关联。 此例程仅适用于 WDM 客户端驱动程序;
除了上述列表中的例程外,还有用于 URB 分配的特定于 KMDF 的新方法。 对于基于 KMDF 的客户端驱动程序,建议调用
- WdfUsbTargetDeviceCreateUrb 方法 (而不是USBD_UrbAllocate) 来分配 URB;
- WdfUsbTargetDeviceCreateIsochUrb 方法 (而不是USBD_IsochUrbAllocate) 为常时等量传输分配 URB。 这些调用根据传输所需的常时等量数据包数分配可变大小的 URB;
USB 3.0 集线器的新用户模式 I/O 控制请求
Windows 8提供了新的 IOCTL,应用程序可以使用这些 IOCTL 检索有关 USB 3.0 集线器及其端口的信息。 新的 IOCTL 如下所示:
- IOCTL_USB_GET_HUB_INFORMATION_EX
- IOCTL_USB_GET_PORT_CONNECTOR_PROPERTIES
- IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX_V2
通过将上述 I/O 请求发送到 USB 驱动程序堆栈,应用程序可检索以下信息集:
- 中心描述符
- 所有端口和配套端口的属性
- 连接到端口的设备的工作速度
WinUSB 的新兼容 ID
设备制造商可以在固件中添加"WINUSB" (Microsoft OS 功能描述符) ,以便 Windows 将设备识别为 WinUSB 设备。 在 Windows 8 中,Winusb.inf 已修改为包含 USB\MS_COMP_WINUSB 作为设备标识符字符串。 该修改使 Windows 能够在检测到设备后立即自动加载 Winusb.sys 作为设备的功能驱动程序。
USB 客户端驱动程序的新 Visual Studio 模板 (*Beta)
Microsoft Visual Studio 2012 包括 USB User-Mode 驱动程序 和 USB Kernel-Mode 驱动程序 模板,它们分别为 UMDF 和 KMDF USB 客户端驱动程序生成入门代码。 模板代码初始化 USB 目标设备对象,以启用与硬件的通信。 有关详细信息,请在VS中查阅下列主题:
- 如何编写第一个 USB 客户端驱动程序 (UMDF)
- 如何编写第一个 USB 客户端驱动程序 (KMDF)
UASP 驱动程序
Windows 8包括一个新的 USB 存储驱动程序,该驱动程序实现 USB 附加 SCSI 协议 (UASP) 。 根据官方 USB 3.0 规范,新驱动程序对批量终结点使用静态流。
启动支持
Windows 到 Go 功能允许 Windows 从闪存驱动器或外部驱动器启动。 可以使用 Windows 副本从各种计算机上的这些驱动器启动。
增强的调试和诊断功能
Windows 8提供新的 USB 3.0 调试工具,以更快地诊断 USB 问题。 有新的 USB 3.0 内核调试器扩展用于检查 USB 3.0 主控制器和设备状态。 可以使用 USB WPP 和事件跟踪来分析 USB 交互并更轻松地排查 USB 设备问题。 Windows 8支持通过 USB 3.0 进行调试。
设备管理器中新的特定于 USB 的故障消息
有时,Windows 可能无法枚举连接的 USB 设备。 通常,当发送到 USB 设备的请求失败或设备返回不正确的描述符时,枚举失败会发生。
在Windows 8,当此类故障发生时,设备管理器 中的"常规"选项卡将显示一条特定于 USB 的错误消息,指示失败原因。
错误字符串如下所示:
- USB 设备描述符的请求失败;
- USB 集地址请求失败;
- USB 端口重置请求失败;
- 未删除 USB 设备的上一个实例;
- USB 设备返回了无效的 USB 配置描述符;
- USB 设备返回了无效的 USB 设备描述符;
- 无法访问注册表;
- USB 配置描述符的请求失败;
- USB 设备的端口状态请求失败;
- USB 设备返回了无效的序列号字符串;
- USB 集 SEL 请求失败;
- 对 USB BOS 描述符的请求失败;
- USB 设备限定符描述符的请求失败;
- USB 序列号字符串描述符的请求失败;
- USB 语言 ID 字符串描述符的请求失败;
- USB 产品说明字符串描述符的请求失败;
- 对 Microsoft OS 扩展配置描述符的请求失败;
- 对 Microsoft OS 容器 ID 描述符的请求失败;
- USB 设备返回了无效的 USB BOS 描述符;
- USB 设备返回了无效的 USB 设备限定符描述符;
- USB 设备返回了无效的 USB 语言 ID 字符串描述符;
- USB 设备返回了无效的 Microsoft OS 容器 ID 描述符;
- USB 设备返回了无效的 Microsoft OS 扩展配置描述符;
- USB 设备返回的产品说明字符串描述符无效;
- USB 设备返回了无效的序列号字符串描述符;