_URB_CONTROL_VENDOR_OR_CLASS_REQUEST 结构 (usb.h)

USB 客户端驱动程序使用 _URB_CONTROL_VENDOR_OR_CLASS_REQUEST 结构向设备、接口、终结点或其他设备定义的目标发出特定于供应商或类的命令。

语法

struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST {
  struct _URB_HEADER   Hdr;
  PVOID                Reserved;
  ULONG                TransferFlags;
  ULONG                TransferBufferLength;
  PVOID                TransferBuffer;
  PMDL                 TransferBufferMDL;
  struct _URB          *UrbLink;
  struct _URB_HCD_AREA hca;
  UCHAR                RequestTypeReservedBits;
  UCHAR                Request;
  USHORT               Value;
  USHORT               Index;
  USHORT               Reserved1;
};

成员

Hdr

指向指定 URB 标头信息的 _URB_HEADER 结构的指针。 Hdr.Function 必须是URB_FUNCTION_CLASS_XXX或URB_FUNCTION_VENDOR_XXX GET_STATUS之一, Hdr.Length 必须为 sizeof(_URB_CONTROL_VENDOR_OR_CLASS_REQUEST)

Reserved

TransferFlags

指定以下标志的零、一或组合:

含义
USBD_TRANSFER_DIRECTION_IN
设置为从设备请求数据。 若要将数据传输到设备,必须清除此标志。 如果管道是中断传输管道,则必须设置标志。
USBD_SHORT_TRANSFER_OK
设置为指示主机控制器在从设备接收的数据包时不返回错误,该数据包短于终结点的最大数据包大小。 终结点的最大数据包大小报告在USB_DEVICE_DESCRIPTOR结构的 bMaxPacketSize0 成员中, (默认控制终结点的设备描述符) 。 对于非默认控制终结点,最大数据包大小在USB_ENDPOINT_DESCRIPTOR结构的 wMaxPacketSize 成员中设置, (终结点描述符) 。

当主控制器收到长度短于控制终结点上的 wMaxPacketSize 值的数据包时,根据主机控制器的类型,行为如下所示:

  • 在 EHCI 主控制器上,主机控制器会立即进入控制传输的状态阶段。 无论是否设置了USBD_SHORT_TRANSFER_OK,传输都成功完成。
  • 在 UHCI 和 OHCI 主机控制器上,如果设置了USBD_SHORT_TRANSFER_OK,则主机控制器将进入状态阶段。 如果未设置USBD_SHORT_TRANSFER_OK,则主机控制器将放弃控制传输的数据和状态阶段,并且传输完成并显示错误。

除非还设置了USBD_TRANSFER_DIRECTION_IN,否则不应设置此标志。

TransferBufferLength

指定 TransferBuffer 中指定的缓冲区或 TransferBufferMDL 中所述的缓冲区的长度(以字节为单位)。 主控制器驱动程序返回在此成员的管道中发送到管道或从管道读取的字节数。

TransferBuffer

指向传输的常驻缓冲区的指针;如果在 TransferBufferMDL 中提供了 MDL,则为 NULL。 此缓冲区的内容取决于 TransferFlags 的值。 如果指定了USBD_TRANSFER_DIRECTION_IN,则此缓冲区将包含从主机控制器驱动程序返回时从设备读取的数据。 否则,此缓冲区包含驱动程序提供的数据以传输到设备。

TransferBufferMDL

指向描述常驻缓冲区的 MDL 的指针;如果 TransferBuffer 中提供了缓冲区,则为 NULL。 缓冲区的内容取决于 TransferFlags 的值。 如果指定了USBD_TRANSFER_DIRECTION_IN,则描述的缓冲区将包含从主机控制器驱动程序返回时从设备读取的数据。 否则,缓冲区包含驱动程序提供的数据,以便传输到设备。 必须从非分页池中分配此 MDL。

UrbLink

保留。 请勿使用。

hca

保留。 请勿使用。

RequestTypeReservedBits

保留。 请勿使用。

Request

指定设备、接口、终结点或其他设备定义目标的 USB 或供应商定义的请求代码。

Value

指定一个特定于 Request 的值,该值成为目标的 USB 定义的设置数据包的一部分。 此值由 请求中使用的代码的创建者定义。

Index

指定设备定义的索引,如果请求针对终结点或接口,则由成功的配置请求返回。 否则, Index 必须为零。

Reserved1

保留。 请勿使用。

注解

驱动程序可以使用 UsbBuildVendorRequest 服务例程格式此 URB。

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

要求

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

另请参阅

URB

USB 结构

_URB_HEADER