structure _URB_CONTROL_VENDOR_OR_CLASS_REQUEST (usb.h)

La structure _URB_CONTROL_VENDOR_OR_CLASS_REQUEST est utilisée par les pilotes clients USB pour émettre une commande spécifique à un fournisseur ou à une classe sur un appareil, une interface, un point de terminaison ou une autre cible définie par l’appareil.

Syntaxe

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;
};

Membres

Hdr

Pointeur vers une structure de _URB_HEADER qui spécifie les informations d’en-tête URB. Hdr.Function doit être URB_FUNCTION_CLASS_XXX ou URB_FUNCTION_VENDOR_XXX GET_STATUS, et Hdr.Length doit être sizeof(_URB_CONTROL_VENDOR_OR_CLASS_REQUEST).

Reserved

TransferFlags

Spécifie zéro, un ou une combinaison des indicateurs suivants :

Valeur Signification
USBD_TRANSFER_DIRECTION_IN
Est défini pour demander des données à partir d’un appareil. Pour transférer des données vers un appareil, cet indicateur doit être clair. L’indicateur doit être défini si le canal est un canal de transfert d’interruption.
USBD_SHORT_TRANSFER_OK
Est défini pour indiquer au contrôleur hôte de ne pas renvoyer d’erreur lorsqu’il reçoit un paquet de l’appareil inférieur à la taille de paquet maximale pour le point de terminaison. La taille maximale du paquet pour le point de terminaison est signalée dans le membre bMaxPacketSize0 de la structure USB_DEVICE_DESCRIPTOR (descripteur d’appareil) pour le point de terminaison de contrôle par défaut. Pour un point de terminaison de contrôle autre que celui par défaut, la taille maximale des paquets est définie dans le membre wMaxPacketSize de la structure USB_ENDPOINT_DESCRIPTOR (descripteur de point de terminaison).

Lorsque le contrôleur hôte reçoit un paquet dont la longueur est inférieure à la valeur wMaxPacketSize sur un point de terminaison de contrôle, le comportement est le suivant en fonction du type de contrôleur hôte :

  • Sur les contrôleurs hôtes EHCI, le contrôleur hôte passe immédiatement à la phase status du transfert de contrôle. Le transfert se termine correctement, que USBD_SHORT_TRANSFER_OK soit défini ou non.
  • Sur les contrôleurs hôtes UHCI et OHCI, si USBD_SHORT_TRANSFER_OK est défini, le contrôleur hôte passe à la phase de status. Si USBD_SHORT_TRANSFER_OK n’est pas défini, le contrôleur hôte abandonne les phases de données et de status du transfert de contrôle et le transfert se termine avec une erreur.

Cet indicateur ne doit pas être défini, sauf si USBD_TRANSFER_DIRECTION_IN est également défini.

TransferBufferLength

Spécifie la longueur, en octets, de la mémoire tampon spécifiée dans TransferBuffer ou décrite dans TransferBufferMDL. Le pilote du contrôleur hôte retourne le nombre d’octets envoyés ou lus à partir du canal dans ce membre.

TransferBuffer

Pointeur vers une mémoire tampon résidente pour le transfert ou est NULL si un MDL est fourni dans TransferBufferMDL. Le contenu de cette mémoire tampon dépend de la valeur de TransferFlags. Si USBD_TRANSFER_DIRECTION_IN est spécifié, cette mémoire tampon contiendra les données lues à partir de l’appareil au retour du pilote du contrôleur hôte. Sinon, cette mémoire tampon contient des données fournies par le pilote pour le transfert vers l’appareil.

TransferBufferMDL

Pointeur vers un MDL qui décrit une mémoire tampon résidente ou a la valeur NULL si une mémoire tampon est fournie dans TransferBuffer. Le contenu de la mémoire tampon dépend de la valeur de TransferFlags. Si USBD_TRANSFER_DIRECTION_IN est spécifié, la mémoire tampon décrite contiendra les données lues à partir de l’appareil au retour du pilote du contrôleur hôte. Sinon, la mémoire tampon contient des données fournies par le pilote pour le transfert vers l’appareil. Cette MDL doit être allouée à partir d’un pool non paginé.

UrbLink

Réservé. Ne pas utiliser.

hca

Réservé. Ne pas utiliser.

RequestTypeReservedBits

Réservé. Ne pas utiliser.

Request

Spécifie le code de requête USB ou défini par le fournisseur pour l’appareil, l’interface, le point de terminaison ou une autre cible définie par l’appareil.

Value

Spécifie une valeur, spécifique à Request, qui fait partie du paquet d’installation défini par USB pour la cible. Cette valeur est définie par le créateur du code utilisé dans Request.

Index

Spécifie l’index défini par l’appareil, retourné par une demande de configuration réussie, si la demande concerne un point de terminaison ou une interface. Sinon, Index doit être égal à zéro.

Reserved1

Réservé. Ne pas utiliser.

Remarques

Les pilotes peuvent utiliser le format de routine de service UsbBuildVendorRequest cette URB.

Les membres réservés de cette structure doivent être traités comme opaques et sont réservés à l’utilisation du système.

Configuration requise

Condition requise Valeur
En-tête usb.h (inclure Usb.h)

Voir aussi

URB

USB Structures

_URB_HEADER