USB 请求块 (URB)

本文介绍 USB 请求块(URB),并提供有关 USB 客户端驱动程序如何使用 Windows 驱动程序模型(WDM)例程来分配、生成和提交 URI 到 USB 驱动程序堆栈的信息。

通用串行总线(USB)客户端驱动程序无法直接与其设备通信。 相反,客户端驱动程序会创建请求并将其提交到 USB 驱动程序堆栈进行处理。 在每个请求中,客户端驱动程序提供一个名为 USB 请求块(URB)的可变长度数据结构。 URB 结构描述请求的详细信息,还包含有关已完成请求状态的信息。 客户端驱动程序通过 URB 执行所有特定于设备的操作,包括数据传输。 在将请求提交到 USB 驱动程序堆栈之前,客户端驱动程序必须使用有关请求的信息初始化 URB。 对于某些类型的请求,Microsoft提供帮助程序例程和宏,这些例程和宏分配 URB 结构,并用客户端驱动程序提供的详细信息填充 URB 结构的必要成员。

每个 URB 都以标准固定大小的标头(_URB_HEADER)开头,其用途是标识所请求的作的类型。 _URB_HEADERLength 成员指定 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 的客户端驱动程序的最佳做法。