structure _URB_HEADER (usb.h)

La structure _URB_HEADER est utilisée par les pilotes clients USB pour fournir des informations de base sur la requête envoyée au pilote du contrôleur hôte.

Syntaxe

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

Membres

Length

Spécifie la longueur, en octets, de l’URB. Pour les requêtes URB qui utilisent des structures de données autres que _URB_HEADER, ce membre doit être défini sur la longueur de la structure de requête URB entière, et non sur la taille _URB_HEADER.

Function

Spécifie un code numérique indiquant l’opération demandée pour cet URB. L’une des valeurs suivantes doit être définie :

URB_FUNCTION_SELECT_CONFIGURATION

Indique au pilote du contrôleur hôte qu’une configuration doit être sélectionnée. S’il est défini, l’URB est utilisé avec URB_SELECT_CONFIGURATION comme structure de données.

URB_FUNCTION_SELECT_INTERFACE

Indique au pilote du contrôleur hôte qu’un autre paramètre d’interface est sélectionné pour une interface. S’il est défini, l’URB est utilisé avec _URB_SELECT_INTERFACE comme structure de données.

URB_FUNCTION_ABORT_PIPE

Indique que toutes les demandes en suspens pour un canal doivent être annulées. S’il est défini, l’URB est utilisé avec _URB_PIPE_REQUEST comme structure de données. Cette demande à usage général permet à un client d’annuler tous les transferts en attente pour le canal spécifié. L’état du canal et l’état du point de terminaison ne sont pas affectés. La demande d’abandon peut se terminer avant que toutes les demandes en suspens ne soient terminées. Ne partez pas du principe que l’achèvement de la demande d’abandon implique que toutes les autres demandes en suspens sont terminées.

URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL

Cette fonction URB est déconseillée dans les systèmes d’exploitation Windows 2000 et ultérieurs et n’est pas prise en charge par Microsoft. Ne pas utiliser. Si vous spécifiez cette fonction avec une requête URB, la demande échoue et le système signale une erreur.

URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL

Cette fonction URB est déconseillée dans les systèmes d’exploitation Windows 2000 et ultérieurs et n’est pas prise en charge par Microsoft. Ne pas utiliser. Si vous spécifiez cette fonction avec une requête URB, la demande échoue et le système signale une erreur.

URB_FUNCTION_GET_FRAME_LENGTH

Cette fonction URB est déconseillée dans les systèmes d’exploitation Windows 2000 et ultérieurs et n’est pas prise en charge par Microsoft. Ne pas utiliser. Si vous utilisez cette fonction avec une requête URB, la requête échoue et le système signale une erreur.

URB_FUNCTION_SET_FRAME_LENGTH

Cette fonction URB est déconseillée dans les systèmes d’exploitation Windows 2000 et ultérieurs et n’est pas prise en charge par Microsoft. Ne pas utiliser. Si vous l’utilisez avec une requête URB, la demande échoue et le système signale une erreur.

URB_FUNCTION_GET_CURRENT_FRAME_NUMBER

Demande le numéro d’image actuel à partir du pilote du contrôleur hôte. S’il est défini, l’URB est utilisé avec _URB_GET_CURRENT_FRAME_NUMBER comme structure de données.

URB_FUNCTION_CONTROL_TRANSFER

Transfère des données vers ou depuis un canal de contrôle. S’il est défini, l’URB est utilisé avec _URB_CONTROL_TRANSFER comme structure de données.

URB_FUNCTION_CONTROL_TRANSFER_EX

Transfère des données vers ou depuis un canal de contrôle sans limite de temps spécifiée par une valeur de délai d’expiration. S’il est défini, l’URB est utilisé avec URB_CONTROL_TRANSFER_EX comme structure de données.

Disponible dans Windows Vista et les systèmes d’exploitation ultérieurs.

URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER

Transfère des données à partir d’un canal en bloc ou d’un canal d’interruption ou vers un canal en bloc. S’il est défini, l’URB est utilisé avec _URB_BULK_OR_INTERRUPT_TRANSFER comme structure de données.

URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER_USING_CHAINED_MDL

Transfère des données vers et à partir d’un canal en bloc ou d’un canal d’interruption, à l’aide de dll MDL chaînées. S’il est défini, l’URB est utilisé avec _URB_BULK_OR_INTERRUPT_TRANSFER comme structure de données. Le pilote client doit définir le membre TransferBufferMDL sur la première structure MDL de la chaîne qui contient la mémoire tampon de transfert. La pile de pilotes USB ignore le membre TransferBuffer lors du traitement de cet URB.

Disponible dans Windows 8. Pour plus d’informations sur l’utilisation des DLL chaînées, consultez Guide pratique pour envoyer des DLL chaînées.>

URB_FUNCTION_ISOCH_TRANSFER

Transfère des données vers ou à partir d’un canal isochronieux. S’il est défini, l’URB est utilisé avec _URB_ISOCH_TRANSFER comme structure de données.

URB_FUNCTION_ISOCH_TRANSFER_USING_CHAINED_MDL

Transfère des données vers ou depuis un canal isochronisé à l’aide de MDL chaînées. S’il est défini, l’URB est utilisé avec _URB_ISOCH_TRANSFER comme structure de données. Le pilote client doit définir le membre TransferBufferMDL sur le premier MDL de la chaîne qui contient la mémoire tampon de transfert. La pile de pilotes USB ignore le membre TransferBuffer lors du traitement de cet URB.

Disponible dans Windows 8. Pour plus d’informations sur l’utilisation des DLL chaînées, consultez Guide pratique pour envoyer des DLL chaînées.>

URB_FUNCTION_RESET_PIPE

Voir URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL.

URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL

Réinitialise le canal indiqué. S’il est défini, cet URB est utilisé avec _URB_PIPE_REQUEST.

Notes

Cet URB remplace URB_FUNCTION_RESET_PIPE.

Le pilote de bus effectue trois tâches en réponse à cet URB :

Tout d’abord, pour tous les canaux à l’exception des canaux isochronieux, cette URB envoie une demande CLEAR_FEATURE pour effacer la fonctionnalité ENDPOINT_HALT de l’appareil.

Deuxièmement, le pilote de bus USB réinitialise le bouton bascule de données côté hôte, comme requis par la spécification USB. Le périphérique USB doit réinitialiser le bouton bascule de données côté appareil lorsque le pilote de bus efface sa fonctionnalité de ENDPOINT_HALT. Étant donné que certains appareils non conformes ne prennent pas en charge cette fonctionnalité, Microsoft fournit les deux URI supplémentaires : URB_FUNCTION_SYNC_CLEAR_STALL et URB_FUNCTION_SYNC_RESET_PIPE. Ceux-ci permettent aux pilotes clients d’effacer la fonctionnalité de ENDPOINT_HALT sur l’appareil ou de réinitialiser le canal côté hôte, respectivement, sans affecter le bouton bascule de données côté hôte. Si l’appareil ne réinitialise pas le bouton bascule de données comme il le doit, le pilote client peut compenser ce défaut en ne réinitialisant pas le bouton bascule de données côté hôte. Si le bouton bascule de données est réinitialisé côté hôte, mais pas côté appareil, les paquets sortent de l’ordre et l’appareil peut supprimer des paquets.

Troisièmement, une fois que le pilote de bus a correctement réinitialisé le canal, il reprend les transferts avec l’URB suivant mis en file d’attente.

Après une réinitialisation de canal, les transferts reprennent avec l’URB suivant mis en file d’attente.

Il n’est pas nécessaire d’effacer une condition d’arrêt sur un canal de contrôle par défaut. Le canal de contrôle par défaut doit toujours accepter les paquets d’installation. Par conséquent, s’il s’arrête, la pile USB efface automatiquement la condition d’arrêt. Le pilote client n’a pas besoin d’effectuer une action spéciale pour effacer la condition d’arrêt sur un canal par défaut.

Tous les transferts doivent être abandonnés ou annulés avant de tenter de réinitialiser le canal.

Cette URB doit être envoyée à PASSIVE_LEVEL.

URB_FUNCTION_SYNC_RESET_PIPE

Efface la condition d’arrêt côté hôte d’un canal. S’il est défini, cet URB est utilisé avec _URB_PIPE_REQUEST comme structure de données.

Cet URB permet à un client d’effacer l’état arrêté d’un canal sans réinitialiser le bouton bascule de données et sans effacer la condition de blocage du point de terminaison (ENDPOINT_HALT de fonctionnalité). Pour effacer une condition d’arrêt sur le canal, réinitialisez le bouton bascule de données côté hôte et effacez un décrochage sur l’appareil avec une seule opération, utilisez URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL.

Les codes status suivants sont importants et ont la signification indiquée :

USBD_STATUS_INVALID_PIPE_HANDLE

Le PipeHandle n’est pas valide

USBD_STATUS_ERROR_BUSY

Le point de terminaison a des transferts actifs en attente.

Il n’est pas nécessaire d’effacer une condition d’arrêt sur un canal de contrôle par défaut. Le canal de contrôle par défaut doit toujours accepter les paquets d’installation. Par conséquent, s’il s’arrête, la pile USB efface automatiquement la condition d’arrêt. Le pilote client n’a pas besoin d’effectuer une action spéciale pour effacer la condition d’arrêt sur un canal par défaut.

Tous les transferts doivent être abandonnés ou annulés avant de tenter de réinitialiser le canal.

Cette URB doit être envoyée à PASSIVE_LEVEL.

Disponible dans les systèmes d’exploitation Windows XP et ultérieurs.

URB_FUNCTION_SYNC_CLEAR_STALL

Efface la condition de décrochage sur le point de terminaison. Pour tous les canaux à l’exception des canaux isochronieux, cet URB envoie une demande CLEAR_FEATURE pour effacer la fonctionnalité de ENDPOINT_HALT de l’appareil. Toutefois, contrairement à la fonction RB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL, cette fonction URB ne réinitialise pas le bouton bascule de données côté hôte du canal. La spécification USB exige que les appareils réinitialisent le bouton bascule de données côté appareil une fois que le client a effacé la fonctionnalité de ENDPOINT_HALT de l’appareil, mais certains appareils non conformes ne réinitialisent pas correctement leur bascule de données. Les pilotes clients qui gèrent de tels appareils peuvent compenser ce défaut en effaçant l’état de décrochage directement avec URB_FUNCTION_SYNC_CLEAR_STALL au lieu de réinitialiser le canal avec URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL. URB_FUNCTION_SYNC_CLEAR_STALL efface une condition de décrochage sur l’appareil sans réinitialiser le bouton bascule de données côté hôte. Cela empêche un appareil non conforme d’interpréter le paquet suivant comme une retransmission et de supprimer le paquet.

S’il est défini, l’URB est utilisé avec _URB_PIPE_REQUEST comme structure de données.

Cette fonction URB doit être envoyée à PASSIVE_LEVEL

Disponible dans les systèmes d’exploitation Windows XP et ultérieurs.

URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE

Récupère le descripteur d’appareil à partir d’un périphérique USB spécifique. S’il est défini, l’URB est utilisé avec _URB_CONTROL_DESCRIPTOR_REQUEST comme structure de données.

URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT

Récupère le descripteur à partir d’un point de terminaison sur une interface pour un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_DESCRIPTOR_REQUEST comme structure de données.

URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE

Définit un descripteur d’appareil sur un appareil. S’il est défini, l’URB est utilisé avec _URB_CONTROL_DESCRIPTOR_REQUEST comme structure de données.

URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT

Définit un descripteur de point de terminaison sur un point de terminaison pour une interface. S’il est défini, l’URB est utilisé avec _URB_CONTROL_DESCRIPTOR_REQUEST comme structure de données.

URB_FUNCTION_SET_FEATURE_TO_DEVICE

Définit une fonctionnalité définie par USB sur un appareil. S’il est défini, l’URB est utilisé avec _URB_CONTROL_FEATURE_REQUEST comme structure de données.

URB_FUNCTION_SET_FEATURE_TO_INTERFACE

Définit une fonctionnalité définie par USB sur une interface pour un appareil. S’il est défini, l’URB est utilisé avec _URB_CONTROL_FEATURE_REQUEST comme structure de données.

URB_FUNCTION_SET_FEATURE_TO_ENDPOINT

Définit une fonctionnalité définie par USB sur un point de terminaison pour une interface sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_FEATURE_REQUEST comme structure de données.

URB_FUNCTION_SET_FEATURE_TO_OTHER

Définit une fonctionnalité définie par USB sur une cible définie par l’appareil sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_FEATURE_REQUEST comme structure de données.

URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE

Efface une fonctionnalité définie par USB sur un appareil. S’il est défini, l’URB est utilisé avec _URB_CONTROL_FEATURE_REQUEST comme structure de données.

URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE

Efface une fonctionnalité définie par USB sur une interface pour un appareil. S’il est défini, l’URB est utilisé avec _URB_CONTROL_FEATURE_REQUEST comme structure de données.

URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT

Efface une fonctionnalité définie par USB sur un point de terminaison, pour une interface, sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_FEATURE_REQUEST comme structure de données.

URB_FUNCTION_CLEAR_FEATURE_TO_OTHER

Efface une fonctionnalité définie par USB sur une cible définie par l’appareil sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_FEATURE_REQUEST comme structure de données.

URB_FUNCTION_GET_STATUS_FROM_DEVICE

Récupère status à partir d’un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_GET_STATUS_REQUEST comme structure de données.

URB_FUNCTION_GET_STATUS_FROM_INTERFACE

Récupère status à partir d’une interface sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_GET_STATUS_REQUEST comme structure de données.

URB_FUNCTION_GET_STATUS_FROM_ENDPOINT

Récupère status à partir d’un point de terminaison pour une interface sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_GET_STATUS_REQUEST comme structure de données.

URB_FUNCTION_GET_STATUS_FROM_OTHER

Récupère status à partir d’une cible définie par l’appareil sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_GET_STATUS_REQUEST comme structure de données.

URB_FUNCTION_VENDOR_DEVICE

Envoie une commande spécifique au fournisseur à un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_VENDOR_OR_CLASS_REQUEST comme structure de données.

URB_FUNCTION_VENDOR_INTERFACE

Envoie une commande spécifique au fournisseur pour une interface sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_VENDOR_OR_CLASS_REQUEST comme structure de données.

URB_FUNCTION_VENDOR_ENDPOINT

Envoie une commande spécifique au fournisseur pour un point de terminaison sur une interface sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_VENDOR_OR_CLASS_REQUEST comme structure de données.

URB_FUNCTION_VENDOR_OTHER

Envoie une commande spécifique au fournisseur à une cible définie par l’appareil sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_VENDOR_OR_CLASS_REQUEST comme structure de données.

URB_FUNCTION_CLASS_DEVICE

Envoie une commande spécifique à une classe définie par USB à un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_VENDOR_OR_CLASS_REQUEST comme structure de données.

URB_FUNCTION_CLASS_INTERFACE

Envoie une commande spécifique à une classe définie par USB à une interface sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_VENDOR_OR_CLASS_REQUEST comme structure de données.

URB_FUNCTION_CLASS_ENDPOINT

Envoie une commande spécifique à une classe définie par USB à un point de terminaison, sur une interface, sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_VENDOR_OR_CLASS_REQUEST comme structure de données.

URB_FUNCTION_CLASS_OTHER

Envoie une commande spécifique à une classe définie par USB à une cible définie par l’appareil sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_VENDOR_OR_CLASS_REQUEST comme structure de données.

URB_FUNCTION_GET_CONFIGURATION

Récupère la configuration actuelle sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_GET_CONFIGURATION_REQUEST comme structure de données.

URB_FUNCTION_GET_INTERFACE

Récupère les paramètres actuels d’une interface sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_GET_INTERFACE_REQUEST comme structure de données.

Disponible dans Windows 2000 et Windows Vista et les systèmes d’exploitation ultérieurs. Non disponible dans Windows XP.

URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE

Récupère le descripteur à partir d’une interface pour un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_DESCRIPTOR_REQUEST comme structure de données.

URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE

Définit un descripteur pour une interface sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_CONTROL_DESCRIPTOR_REQUEST comme structure de données.

URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR

Récupère un descripteur de fonctionnalité de système d’exploitation Microsoft à partir d’un périphérique USB ou d’une interface sur un périphérique USB. S’il est défini, l’URB est utilisé avec _URB_OS_FEATURE_DESCRIPTOR_REQUEST comme structure de données.

Disponible dans les systèmes d’exploitation Windows XP et ultérieurs.

URB_FUNCTION_OPEN_STATIC_STREAMS

Ouvre les flux dans le point de terminaison en bloc spécifié. S’il est défini, l’URB est utilisé avec _URB_OPEN_STATIC_STREAMS comme structure de données.

Disponible dans Windows 8. Pour plus d’informations sur la mise en forme d’un URB pour une demande de flux ouvert, consultez Comment ouvrir et fermer des flux statiques dans un point de terminaison en bloc USB.

URB_FUNCTION_CLOSE_STATIC_STREAMS

Ferme tous les flux ouverts dans le point de terminaison en bloc spécifié. S’il est défini, l’URB est utilisé avec _URB_PIPE_REQUEST comme structure de données.

Disponible dans Windows 8. Pour plus d’informations sur la mise en forme d’un URB pour une demande de flux ouvert, consultez Comment ouvrir et fermer des flux statiques dans un point de terminaison en bloc USB.

Status

Contient un code USBD_STATUS_XXX au retour du pilote du contrôleur hôte.

UsbdDeviceHandle

Réservé. Ne pas utiliser.

UsbdFlags

Réservé. Ne pas utiliser.

Remarques

La structure _URB_HEADER est membre de toutes les requêtes USB qui font partie de la structure URB. La structure _URB_HEADER est utilisée pour fournir des informations courantes sur chaque requête au pilote du contrôleur hôte.

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_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