USB 请求阻止 (URB)

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

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

每个 URB 都以标准固定大小的标头开头, (_URB_HEADER) ,其用途是标识请求的操作类型。 _URB_HEADERLength 成员指定 URB 的大小(以字节为单位)。 Function 成员必须是一系列系统定义的URB_FUNCTION_XXX常量之一,用于确定所请求的操作类型。 例如,在数据传输的情况下,此成员指示传输的类型。 函数代码URB_FUNCTION_CONTROL_TRANSFER、URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER和URB_FUNCTION_ISOCH_TRANSFER分别指示控制、批量/中断和常时等量传输。 USB 驱动程序堆栈使用 Status 成员返回特定于 USB 的状态代码。

为了提交 URB,客户端驱动程序使用 IOCTL_INTERNAL_USB_SUBMIT_URB 请求,该请求通过 I/O 请求数据包 (IRP) 类型IRP_MJ_INTERNAL_DEVICE_CONTROL传递到设备。

USB 驱动程序堆栈处理完 URB 后,驱动程序堆栈将使用 URB 结构的 Status 成员返回特定于 USB 的状态代码。

注意

KMDF 和 UMDF 驱动程序开发人员应使用相应的框架接口来与 USB 设备通信。 有关详细信息,请参阅使用用于 KMDF 驱动程序的 USB 设备和在 UMDF 中使用 USB 接口。 这些主题讨论用于 USB 设备通信的基础 WDM 驱动程序接口。

在本节中

主题 说明
分配和构建 URB 本主题介绍 USB 客户端驱动程序如何在将请求发送到 Microsoft 提供的 USB 驱动程序堆栈之前,使用 Windows 驱动程序模型 (WDM) 驱动程序例程来分配和格式化 URB。
如何提交 URB 本主题介绍将初始化的 URB 提交到 USB 驱动程序堆栈以处理特定请求所需的步骤。
最佳做法:使用 URB 本主题介绍客户端驱动程序分配、生成 URB 并将其发送到Windows 8随附的 USB 驱动程序堆栈的最佳做法。