USB 请求阻止 (URB)
本文介绍 (URB) 的 USB 请求块,并提供有关 USB 客户端驱动程序如何使用 Windows 驱动程序模型 (WDM) 例程来分配、生成 URB 并将其提交到 USB 驱动程序堆栈的信息。
通用串行总线 (USB) 客户端驱动程序无法直接与其设备通信。 相反,客户端驱动程序会创建请求并将其提交到 USB 驱动程序堆栈进行处理。 在每个请求中,客户端驱动程序提供一个可变长度的数据结构,称为 USB 请求块 (URB) 。 URB 结构描述请求的详细信息,还包含有关已完成请求状态的信息。 客户端驱动程序通过 URL 执行所有特定于设备的操作,包括数据传输。 在将请求提交到 USB 驱动程序堆栈之前,客户端驱动程序必须使用有关请求的信息初始化 URB。 对于某些类型的请求,Microsoft 提供帮助程序例程和宏,这些例程和宏分配 URB 结构,并使用客户端驱动程序提供的详细信息填充 URB 结构的必要成员。
每个 URB 都以标准固定大小的标头开头, (_URB_HEADER) ,其用途是标识请求的操作类型。 _URB_HEADER 的 Length 成员指定 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 驱动程序堆栈的最佳做法。 |