本文介绍 USB 请求块(URB),并提供有关 USB 客户端驱动程序如何使用 Windows 驱动程序模型(WDM)例程来分配、生成和提交 URI 到 USB 驱动程序堆栈的信息。
通用串行总线(USB)客户端驱动程序无法直接与其设备通信。 相反,客户端驱动程序会创建请求并将其提交到 USB 驱动程序堆栈进行处理。 在每个请求中,客户端驱动程序提供一个名为 USB 请求块(URB)的可变长度数据结构。 URB 结构描述请求的详细信息,还包含有关已完成请求状态的信息。 客户端驱动程序通过 URB 执行所有特定于设备的操作,包括数据传输。 在将请求提交到 USB 驱动程序堆栈之前,客户端驱动程序必须使用有关请求的信息初始化 URB。 对于某些类型的请求,Microsoft提供帮助程序例程和宏,这些例程和宏分配 URB 结构,并用客户端驱动程序提供的详细信息填充 URB 结构的必要成员。
每个 URB 都以标准固定大小的标头(_URB_HEADER)开头,其用途是标识所请求的作的类型。 _URB_HEADER的 Length 成员指定 URB 的大小(以字节为单位)。 函数成员必须是系统定义的一系列URB_FUNCTION_XXX常量之一,它确定所请求的作的类型。 例如,对于数据传输,此成员表示传输的类型。 函数代码URB_FUNCTION_CONTROL_TRANSFER、URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER和URB_FUNCTION_ISOCH_TRANSFER分别指示控制、批量/中断和时序传输。 USB 驱动程序堆栈使用 状态 成员返回特定于 USB 的状态代码。
若要提交 URB,客户端驱动程序使用 IOCTL_INTERNAL_USB_SUBMIT_URB 请求,该请求通过类型 为 IRP_MJ_INTERNAL_DEVICE_CONTROL 的 I/O 请求数据包(IRP)传递到设备。
USB 驱动程序堆栈处理完 URB 后,驱动程序堆栈使用 URB 结构的状态成员返回特定于 USB 的状态代码。
注释
KMDF 和 UMDF 驱动程序开发人员应使用相应的框架接口与 USB 设备通信。 有关详细信息,请参阅 KMDF 驱动程序的 USB 设备操作 和 UMDF 中的 USB 接口操作。 这些主题讨论用于 USB 设备通信的基础 WDM 驱动程序接口。
本部分内容
| 主题 | DESCRIPTION |
|---|---|
| 分配和生成 URL | 本主题介绍 USB 客户端驱动程序如何使用 Windows 驱动程序模型(WDM)驱动程序例程在将请求发送到Microsoft提供的 USB 驱动程序堆栈之前分配和格式化 URB。 |
| 如何提交 URB | 本主题介绍将初始化的 URB 提交到 USB 驱动程序堆栈以处理特定请求所需的步骤。 |
| 最佳做法:使用 URL | 本主题介绍用于分配、生成和向 Windows 8 随附的 USB 驱动程序堆栈发送 URB 的客户端驱动程序的最佳做法。 |