_URB_HEADER结构 (usb.h)

USB 客户端驱动程序使用 _URB_HEADER 结构来提供有关发送到主机控制器驱动程序的请求的基本信息。

语法

struct _URB_HEADER {
  USHORT      Length;
  USHORT      Function;
  USBD_STATUS Status;
  PVOID       UsbdDeviceHandle;
  ULONG       UsbdFlags;
};

成员

Length

指定 URB 的长度(以字节为单位)。 对于使用 除 _URB_HEADER 以外的数据结构的 URB 请求,必须将此成员设置为整个 URB 请求结构的长度,而不是_URB_HEADER大小。

Function

指定一个数字代码,指示为此 URB 请求的操作。 必须设置以下值之一:

URB_FUNCTION_SELECT_CONFIGURATION

向主机控制器驱动程序指示要选择配置。 如果设置,则 URB 与 URB_SELECT_CONFIGURATION 一起使用作为数据结构。

URB_FUNCTION_SELECT_INTERFACE

向主机控制器驱动程序指示正在为接口选择备用接口设置。 如果设置,则 URB 与 _URB_SELECT_INTERFACE 一起使用作为数据结构。

URB_FUNCTION_ABORT_PIPE

指示应取消管道的所有未完成请求。 如果设置,则 URB 与 _URB_PIPE_REQUEST 一起使用作为数据结构。 此常规用途请求使客户端能够取消指定管道的任何挂起传输。 管道状态和终结点状态不受影响。 中止请求可能会在所有未完成的请求完成之前完成。 不要假定中止请求的完成意味着所有其他未完成的请求都已完成。

URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL

此 URB 函数在 Windows 2000 及更高版本的操作系统中 已弃用 ,Microsoft 不支持。 请勿使用。 如果使用 URB 请求指定此函数,则请求将失败,并且系统将报告错误。

URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL

此 URB 函数在 Windows 2000 及更高版本的操作系统中 已弃用 ,Microsoft 不支持。 请勿使用。 如果使用 URB 请求指定此函数,则请求将失败,并且系统将报告错误。

URB_FUNCTION_GET_FRAME_LENGTH

此 URB 函数在 Windows 2000 及更高版本的操作系统中 已弃用 ,Microsoft 不支持。 请勿使用。 如果将此函数与 URB 请求一起使用,则请求将失败,并且系统将报告错误。

URB_FUNCTION_SET_FRAME_LENGTH

此 URB 函数在 Windows 2000 及更高版本的操作系统中 已弃用 ,Microsoft 不支持。 请勿使用。 如果将其与 URB 请求一起使用,则请求将失败,并且系统将报告错误。

URB_FUNCTION_GET_CURRENT_FRAME_NUMBER

从主机控制器驱动程序请求当前帧编号。 如果设置,则 URB 与 _URB_GET_CURRENT_FRAME_NUMBER 一起使用作为数据结构。

URB_FUNCTION_CONTROL_TRANSFER

将数据传输到控制管道或从控件管道传输数据。 如果设置,则 URB 与 _URB_CONTROL_TRANSFER 一起使用作为数据结构。

URB_FUNCTION_CONTROL_TRANSFER_EX

在没有超时值指定的时间限制的情况下,向或从控制管道传输数据。 如果设置,则 URB 与 URB_CONTROL_TRANSFER_EX 一起使用作为数据结构。

在 Windows Vista 和更高版本的操作系统中可用。

URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER

将数据从大容量管道或中断管道或大容量管道传输。 如果设置,则 URB 与 _URB_BULK_OR_INTERRUPT_TRANSFER 一起使用作为数据结构。

URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_USING_CHAINED_MDL

使用链接的 MDL 向大容量管道或中断管道传输数据。 如果设置,则 URB 与 _URB_BULK_OR_INTERRUPT_TRANSFER 一起使用作为数据结构。 客户端驱动程序必须将 TransferBufferMDL 成员设置为链中包含传输缓冲区的第一个 MDL 结构。 USB 驱动程序堆栈在处理此 URB 时会忽略 TransferBuffer 成员。

在 Windows 8 中可用。 有关使用链接的 MDL 的信息,请参阅 如何发送链接的 MDL“>如何发送链接的 MDL。

URB_FUNCTION_ISOCH_TRANSFER

将数据传输到常量管道或从常量管道传输数据。 如果设置,则 URB 与 _URB_ISOCH_TRANSFER 一起使用作为数据结构。

URB_FUNCTION_ISOCH_TRANSFER_USING_CHAINED_MDL

使用链接的 MDL 向常时等量管道或从常量管道传输数据。 如果设置,则 URB 与 _URB_ISOCH_TRANSFER 一起使用作为数据结构。 客户端驱动程序必须将 TransferBufferMDL 成员设置为链中包含传输缓冲区的第一个 MDL 。 USB 驱动程序堆栈在处理此 URB 时会忽略 TransferBuffer 成员。

在 Windows 8 中可用。 有关使用链接的 MDL 的信息,请参阅 如何发送链接的 MDL“>如何发送链接的 MDL。

URB_FUNCTION_RESET_PIPE

请参阅URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL。

URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL

重置指示的管道。 如果已设置,则此 URB 用于 _URB_PIPE_REQUEST

注意

此 URB 替换URB_FUNCTION_RESET_PIPE。

总线驱动程序完成三个任务以响应此 URB:

首先,对于除常量管道以外的所有管道,此 URB 发送CLEAR_FEATURE请求以清除设备的ENDPOINT_HALT功能。

其次,USB 总线驱动程序根据 USB 规范的要求重置主机端的数据切换。 当总线驱动程序清除其ENDPOINT_HALT功能时,USB 设备应重置设备端的数据切换。 由于某些不合规的设备不支持此功能,Microsoft 提供了两个附加的 URL:URB_FUNCTION_SYNC_CLEAR_STALL和URB_FUNCTION_SYNC_RESET_PIPE。 这些选项允许客户端驱动程序清除设备上的ENDPOINT_HALT功能,或分别重置主机端的管道,而不会影响主机端的数据切换。 如果设备未在应该时重置数据切换,则客户端驱动程序可以通过不重置主机端数据切换来弥补此缺陷。 如果数据切换在主机端重置,但不在设备端重置,数据包将不按顺序排列,并且设备可能会丢弃数据包。

第三,在总线驱动程序成功重置管道后,它将恢复与下一个排队 URB 的传输。

管道重置后,传输会随着下一个排队的 URB 恢复。

无需清除默认控件管道上的停止条件。 默认控制管道必须始终接受设置数据包,因此如果它停止,USB 堆栈将自动清除停止条件。 客户端驱动程序无需执行任何特殊操作即可清除默认管道上的停止条件。

在尝试重置管道之前,必须中止或取消所有传输。

此 URB 必须在 PASSIVE_LEVEL 发送。

URB_FUNCTION_SYNC_RESET_PIPE

清除管道主机端的停止条件。 如果设置,则此 URB 与 _URB_PIPE_REQUEST 一起使用作为数据结构。

此 URB 允许客户端清除管道的已停止状态,而无需重置数据切换,也不清除终结点停止条件 (功能ENDPOINT_HALT) 。 若要清除管道上的停止条件,请重置主机端数据切换并使用单个操作清除设备上的停止,请使用 URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL。

以下状态代码非常重要,并具有指示的含义:

USBD_STATUS_INVALID_PIPE_HANDLE

PipeHandle 无效

USBD_STATUS_ERROR_BUSY

终结点具有挂起的活动传输。

无需清除默认控件管道上的停止条件。 默认控制管道必须始终接受设置数据包,因此如果它停止,USB 堆栈将自动清除停止条件。 客户端驱动程序无需执行任何特殊操作即可清除默认管道上的停止条件。

在尝试重置管道之前,必须中止或取消所有传输。

此 URB 必须在 PASSIVE_LEVEL 发送。

在 Windows XP 和更高版本的操作系统中可用。

URB_FUNCTION_SYNC_CLEAR_STALL

清除终结点上的停止条件。 对于除常量管道以外的所有管道,此 URB 发送CLEAR_FEATURE请求以清除设备的ENDPOINT_HALT功能。 但是,与 RB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL 函数不同,此 URB 函数不会重置管道主机端的数据切换。 USB 规范要求设备在客户端清除设备的ENDPOINT_HALT功能后重置设备端数据切换,但某些不合规的设备无法正确重置其数据切换。 管理此类设备的客户端驱动程序可以通过直接使用URB_FUNCTION_SYNC_CLEAR_STALL清除停滞条件而不是使用URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL重置管道来弥补此缺陷。 URB_FUNCTION_SYNC_CLEAR_STALL清除设备上的停止状态,而无需重置主机端数据切换。 这可以防止不合规的设备将下一个数据包解释为重新传输并丢弃数据包。

如果设置,则 URB 与 _URB_PIPE_REQUEST 一起使用作为数据结构。

应在 PASSIVE_LEVEL 发送此 URB 函数

在 Windows XP 和更高版本的操作系统中可用。

URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE

从特定 USB 设备检索设备描述符。 如果设置,则 URB 与 _URB_CONTROL_DESCRIPTOR_REQUEST 一起使用作为数据结构。

URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT

从 USB 设备接口上的终结点检索描述符。 如果设置,则 URB 与 _URB_CONTROL_DESCRIPTOR_REQUEST 一起使用作为数据结构。

URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE

在设备上设置设备描述符。 如果设置,则 URB 与 _URB_CONTROL_DESCRIPTOR_REQUEST 一起使用作为数据结构。

URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT

在接口的终结点上设置终结点描述符。 如果设置,则 URB 与 _URB_CONTROL_DESCRIPTOR_REQUEST 一起使用作为数据结构。

URB_FUNCTION_SET_FEATURE_TO_DEVICE

在设备上设置 USB 定义的功能。 如果设置,则 URB 与 _URB_CONTROL_FEATURE_REQUEST 一起使用作为数据结构。

URB_FUNCTION_SET_FEATURE_TO_INTERFACE

在设备的接口上设置 USB 定义的功能。 如果设置,则 URB 与 _URB_CONTROL_FEATURE_REQUEST 一起使用作为数据结构。

URB_FUNCTION_SET_FEATURE_TO_ENDPOINT

在 USB 设备上的接口的终结点上设置 USB 定义的功能。 如果设置,则 URB 与 _URB_CONTROL_FEATURE_REQUEST 一起使用作为数据结构。

URB_FUNCTION_SET_FEATURE_TO_OTHER

在 USB 设备上的设备定义目标上设置 USB 定义的功能。 如果设置,则 URB 与 _URB_CONTROL_FEATURE_REQUEST 一起使用作为数据结构。

URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE

清除设备上的 USB 定义的功能。 如果设置,则 URB 与 _URB_CONTROL_FEATURE_REQUEST 一起使用作为数据结构。

URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE

清除设备接口上的 USB 定义的功能。 如果设置,则 URB 与 _URB_CONTROL_FEATURE_REQUEST 一起使用作为数据结构。

URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT

清除 USB 设备上的终结点(接口)上的 USB 定义的功能。 如果设置,则 URB 与 _URB_CONTROL_FEATURE_REQUEST 一起使用作为数据结构。

URB_FUNCTION_CLEAR_FEATURE_TO_OTHER

清除 USB 设备上的设备定义目标上的 USB 定义功能。 如果设置,则 URB 与 _URB_CONTROL_FEATURE_REQUEST 一起使用作为数据结构。

URB_FUNCTION_GET_STATUS_FROM_DEVICE

从 USB 设备检索状态。 如果设置,则 URB 与 _URB_CONTROL_GET_STATUS_REQUEST 一起使用作为数据结构。

URB_FUNCTION_GET_STATUS_FROM_INTERFACE

从 USB 设备上的接口检索状态。 如果设置,则 URB 与 _URB_CONTROL_GET_STATUS_REQUEST 一起使用作为数据结构。

URB_FUNCTION_GET_STATUS_FROM_ENDPOINT

从 USB 设备上的接口的终结点检索状态。 如果设置,则 URB 与 _URB_CONTROL_GET_STATUS_REQUEST 一起使用作为数据结构。

URB_FUNCTION_GET_STATUS_FROM_OTHER

从 USB 设备上的设备定义目标检索状态。 如果设置,则 URB 与 _URB_CONTROL_GET_STATUS_REQUEST 一起使用作为数据结构。

URB_FUNCTION_VENDOR_DEVICE

将特定于供应商的命令发送到 USB 设备。 如果设置,则 URB 与 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 一起使用作为数据结构。

URB_FUNCTION_VENDOR_INTERFACE

为 USB 设备上的接口发送特定于供应商的命令。 如果设置,则 URB 与 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 一起使用作为数据结构。

URB_FUNCTION_VENDOR_ENDPOINT

为 USB 设备上的接口上的终结点发送特定于供应商的命令。 如果设置,则 URB 与 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 一起使用作为数据结构。

URB_FUNCTION_VENDOR_OTHER

将特定于供应商的命令发送到 USB 设备上的设备定义目标。 如果设置,则 URB 与 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 一起使用作为数据结构。

URB_FUNCTION_CLASS_DEVICE

将 USB 定义的类特定命令发送到 USB 设备。 如果设置,则 URB 与 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 一起使用作为数据结构。

URB_FUNCTION_CLASS_INTERFACE

将 USB 定义的类特定命令发送到 USB 设备上的接口。 如果设置,则 URB 与 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 一起使用作为数据结构。

URB_FUNCTION_CLASS_ENDPOINT

将 USB 定义的类特定命令发送到 USB 设备上的接口上的终结点。 如果设置,则 URB 与 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 一起使用作为数据结构。

URB_FUNCTION_CLASS_OTHER

将 USB 定义的类特定命令发送到 USB 设备上的设备定义目标。 如果设置,则 URB 与 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 一起使用作为数据结构。

URB_FUNCTION_GET_CONFIGURATION

检索 USB 设备上的当前配置。 如果设置,则 URB 与 _URB_CONTROL_GET_CONFIGURATION_REQUEST 一起使用作为数据结构。

URB_FUNCTION_GET_INTERFACE

检索 USB 设备上接口的当前设置。 如果设置,则 URB 与 _URB_CONTROL_GET_INTERFACE_REQUEST 一起使用作为数据结构。

适用于 Windows 2000 和 Windows Vista 及更高版本的操作系统。 在 Windows XP 中不可用。

URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE

从 USB 设备的接口检索描述符。 如果设置,则 URB 与 _URB_CONTROL_DESCRIPTOR_REQUEST 一起使用作为数据结构。

URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE

为 USB 设备上的接口设置描述符。 如果设置,则 URB 与 _URB_CONTROL_DESCRIPTOR_REQUEST 一起使用作为数据结构。

URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR

从 USB 设备或 USB 设备上的接口检索 Microsoft OS 功能描述符。 如果设置,则 URB 与 _URB_OS_FEATURE_DESCRIPTOR_REQUEST 一起使用作为数据结构。

在 Windows XP 和更高版本的操作系统中可用。

URB_FUNCTION_OPEN_STATIC_STREAMS

打开指定批量终结点中的流。 如果设置,则 URB 与 _URB_OPEN_STATIC_STREAMS 一起使用作为数据结构。

在 Windows 8 中可用。 有关为开放流请求设置 URB 格式的信息,请参阅 如何在 USB 批量终结点中打开和关闭静态流

URB_FUNCTION_CLOSE_STATIC_STREAMS

关闭指定批量终结点中打开的所有流。 如果设置,则 URB 与 _URB_PIPE_REQUEST 一起使用作为数据结构。

在 Windows 8 中可用。 有关为开放流请求设置 URB 格式的信息,请参阅 如何在 USB 批量终结点中打开和关闭静态流

Status

包含主控制器驱动程序返回时USBD_STATUS_XXX 代码。

UsbdDeviceHandle

保留。 请勿使用。

UsbdFlags

保留。 请勿使用。

注解

_URB_HEADER 结构是属于 URB 结构的所有 USB 请求的成员。 _URB_HEADER结构用于向主机控制器驱动程序提供有关每个请求的常见信息。

此结构的保留成员必须被视为不透明,并保留供系统使用。

要求

要求
Header usb.h (包括 Usb.h)

另请参阅

URB

USB 结构

_URB_BULK_OR_INTERRUPT_TRANSFER

_URB_CONTROL_DESCRIPTOR_REQUEST

_URB_CONTROL_FEATURE_REQUEST

_URB_CONTROL_GET_CONFIGURATION_REQUEST

_URB_CONTROL_GET_INTERFACE_REQUEST

_URB_CONTROL_GET_STATUS_REQUEST

_URB_CONTROL_TRANSFER

_URB_CONTROL_VENDOR_OR_CLASS_REQUEST

_URB_GET_CURRENT_FRAME_NUMBER

_URB_ISOCH_TRANSFER

_URB_OS_FEATURE_DESCRIPTOR_REQUEST

_URB_PIPE_REQUEST

_URB_SELECT_CONFIGURATION

_URB_SELECT_INTERFACE