_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 请求指定此函数,则请求将失败,系统将报告错误。
URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL
此 URB 函数 在 Windows 2000 及更高版本中 弃用,Microsoft不支持此 URB 函数。 请勿使用。 如果使用 URB 请求指定此函数,则请求将失败,系统将报告错误。
URB_FUNCTION_GET_FRAME_LENGTH
此 URB 函数 在 Windows 2000 及更高版本中 弃用,Microsoft不支持此 URB 函数。 请勿使用。 如果将此函数用于 URB 请求,则请求将失败,系统将报告错误。
URB_FUNCTION_SET_FRAME_LENGTH
此 URB 函数 在 Windows 2000 及更高版本中 弃用,Microsoft不支持此 URB 函数。 请勿使用。 如果将它用于 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 结构。 处理此 URB 时,USB 驱动程序堆栈会忽略 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。 处理此 URB 时,USB 驱动程序堆栈会忽略 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提供了另外两个 URB:URB_FUNCTION_SYNC_CLEAR_STALL和URB_FUNCTION_SYNC_RESET_PIPE。 这些允许客户端驱动程序清除设备上的ENDPOINT_HALT功能,或分别在主机端重置管道,而不会影响主机端的数据切换。 如果设备在何时不重置数据切换,则客户端驱动程序可以通过不重置主机端数据切换来补偿此缺陷。 如果数据切换在主机端重置,但不重置在设备端,数据包将脱离顺序,并且设备可能会丢弃数据包。
第三,在总线驱动程序成功重置管道后,它将恢复与下一个排队 URB 的传输。
在管道重置后,传输会随着下一个排队的 URB 恢复。
不需要清除默认控制管道上的停止条件。 默认控制管道必须始终接受设置数据包,因此如果它停止,USB 堆栈将自动清除停止条件。 客户端驱动程序不需要采取任何特殊作来清除默认管道上的停止条件。
在尝试重置管道之前,必须中止或取消所有传输。
必须在PASSIVE_LEVEL发送此 URB。
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 堆栈将自动清除停止条件。 客户端驱动程序不需要采取任何特殊作来清除默认管道上的停止条件。
在尝试重置管道之前,必须中止或取消所有传输。
必须在PASSIVE_LEVEL发送此 URB。
在 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 结构用于向主机控制器驱动程序提供有关每个请求的常见信息。
此结构的保留成员必须被视为不透明,并保留供系统使用。
要求
要求 | 价值 |
---|---|
标头 | usb.h (包括 Usb.h) |
另请参阅
_URB_BULK_OR_INTERRUPT_TRANSFER
_URB_CONTROL_DESCRIPTOR_REQUEST
_URB_CONTROL_GET_CONFIGURATION_REQUEST
_URB_CONTROL_GET_INTERFACE_REQUEST
_URB_CONTROL_GET_STATUS_REQUEST
_URB_CONTROL_VENDOR_OR_CLASS_REQUEST