Windows 中的 USB 设备端驱动程序

描述 USB 函数堆栈的体系结构。

在 USB 设备上,当 ACPI 创建 USB 设备物理设备对象(PDO)时,USB 函数堆栈是指即插即用管理器枚举的一组驱动程序。

在单个配置设备中,USB 设备可以定义一个或多个接口。 例如,用于将文件传输到设备以及从设备传输文件的媒体传输协议(MTP)。 复合 USB 设备可以在单个配置中支持多个接口。 USB 函数堆栈为每个接口创建 PDO,PnP 管理器加载为该接口创建函数设备对象(FDO)的类驱动程序。

USB 函数堆栈在此图像中概念化:

usb 函数堆栈。

应用程序和服务

  • 所有用户模式请求都会发送到Microsoft提供的内核模式类驱动程序GenericUSBFn.sys。 可以通过发送泛型usbfnioctl.h定义的 I/O 控制代码(IOCTLs),创建与GenericUSBFn.sys通信的用户模式服务。 有关这些 IOCTL 的详细信息,请参阅 从用户模式服务与GenericUSBFn.sys通信

USB 函数类驱动程序

USB 函数类驱动程序在 USB 设备上实现特定接口(或接口组)的功能。 MTP 和 IpOverUsb 是系统提供的类驱动程序的示例。 类驱动程序可以纯粹作为内核模式驱动程序实现,也可以是与系统提供的类驱动程序GenericUSBFn.sys配对的用户模式服务。

函数类驱动程序使用 USB 函数类驱动程序将请求发送到控制器到 UFX 编程接口

USB 函数类扩展 (UFX)

USB 函数类扩展(UFX)是内核模式驱动程序框架(KMDF)的系统提供的扩展。 USB 是标准总线,具有一些必需的功能和功能。 UFX 负责实现所有 USB 函数控制器通用的 USB 函数逻辑,以及处理和/或从 USB 函数类驱动程序调度请求。 具体而言,UFX 处理枚举设备和处理标准控制传输的过程。 若要执行其中一些操作,UFX 需要知道总线的功能。 当建立类扩展接口时,这些功能将报告给 UFX。

UFX 公开了上层(USB 函数类驱动程序和用户模式服务)可用于将请求发送到控制器的标准 IOCTL。 此外,UFX 会通知上层有关从主机接收的标准请求。

USB 函数客户端驱动程序

UFX 提供了一个抽象接口,可在不同的控制器之间一致地工作。 但是,控制器具有不同的功能,限制包括终结点数、终结点类型、低功率、远程唤醒。 例如,某些控制器支持 DMA,而其他控制器则不支持。 某些控制器在硬件中实现流,而其他控制器则要求驱动程序处理流。 出于这些原因,UFX 中仅处理常见功能。 传输、电源管理、流支持和其他功能因控制器到控制器而异,由客户端驱动程序处理。

USB 函数客户端驱动程序负责实现控制器特定的操作。 其中包括实现终结点数据传输、USB 设备状态更改(重置、暂停、恢复)、附加/分离检测、端口/充电器检测。 客户端驱动程序还负责处理电源管理和 PnP 事件。

函数客户端驱动程序使用 USB 函数类驱动程序将作为内核模式驱动程序框架 (KMDF) 驱动程序写入 UFX 编程接口。

Microsoft为 ChipIdea 和 Synopsys 控制器提供内置函数客户端驱动程序(UfxChipidea.sys、Ufxsynopsys.sys)。

USB 较低筛选器驱动程序

如果函数控制器使用现装 Synopsys 和 ChipIdea 驱动程序,USB 较低筛选器驱动程序支持检测充电器。 筛选器驱动程序从 USB 端口检测开始管理 USB 充电。 它必须为它支持的每个充电器类型发布 GUID,以及该充电器的属性列表。 如果特定充电器可配置,较低的 USB 筛选器驱动程序将定义受支持的 PropertyID 列表及其可发送到它的相应值类型,以配置充电器。 驱动程序还通知电池堆栈何时可以开始充电,以及设备可以绘制的最大当前量。 对于 Synopsys 和 ChipIdea 驱动程序以外的客户端驱动程序,可以在客户端驱动程序中实现充电逻辑。

函数类驱动程序使用 编程接口支持专有充电器向 UFX 发送请求。