Partager via


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 demande 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 cette 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. Si elle est définie, 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. Si elle est définie, l’URB est utilisé avec _URB_SELECT_INTERFACE comme structure de données.

URB_FUNCTION_ABORT_PIPE

Indique que toutes les demandes en attente d’un canal doivent être annulées. Si elle est définie, l’URB est utilisé avec _URB_PIPE_REQUEST comme structure de données. Cette demande à usage général permet à un client d’annuler 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 la fin de toutes les demandes en attente. N'pas supposez que l’achèvement de la demande d’abandon implique que toutes les autres demandes en attente se 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. N’utilisez pas. Si vous spécifiez cette fonction avec une requête URB, la requête é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. N’utilisez pas. Si vous spécifiez cette fonction avec une requête URB, la requête é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. N’utilisez pas. 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. N’utilisez pas. Si vous l’utilisez avec une requête URB, la requête échoue et le système signale une erreur.

URB_FUNCTION_GET_CURRENT_FRAME_NUMBER

Demande le numéro d’image actuel du pilote du contrôleur hôte. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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 les données d’un canal en bloc ou d’un canal d’interruption ou vers un canal en bloc. Si elle est définie, 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 MDL chaînés. Si elle est définie, 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 dans 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 de MDL chaînés, consultez Comment envoyer des dll MDL chaînées«>Comment envoyer des DLL chaînées.

URB_FUNCTION_ISOCH_TRANSFER

Transfère des données vers ou depuis un canal isochrone. Si elle est définie, 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 à partir d’un canal isochrone à l’aide de MDL chaînés. Si elle est définie, 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 dans 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 de MDL chaînés, consultez Comment envoyer des dll MDL chaînées«>Comment 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é. Si elle est définie, cette URB est utilisée avec _URB_PIPE_REQUEST.

Note

Cette URB remplace URB_FUNCTION_RESET_PIPE.

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

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

Deuxièmement, le pilote de bus USB réinitialise les données côté hôte, comme requis par la spécification USB. Le périphérique USB doit réinitialiser le bouton bascule des 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 des données côté hôte. Si l’appareil ne réinitialise pas le bouton bascule de données quand il doit, le pilote client peut compenser ce défaut en ne réinitialisant pas le bouton bascule des 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 la séquence 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 la prochaine URB mise en file d’attente.

Après une réinitialisation du canal, les transferts reprendnt avec la prochaine URB mise 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 du côté hôte d’un canal. Si elle est définie, cette URB est utilisée avec _URB_PIPE_REQUEST comme structure de données.

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

Les codes d’état 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 Windows XP et les systèmes d’exploitation ultérieurs.

URB_FUNCTION_SYNC_CLEAR_STALL

Efface la condition de blocage sur le point de terminaison. Pour tous les canaux à l’exception des canaux isochrones, cette URB envoie une demande de 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 des données sur le côté hôte du canal. La spécification USB exige que les appareils réinitialisent le bouton bascule des données côté appareil une fois que le client efface la fonctionnalité de ENDPOINT_HALT de l’appareil, mais certains appareils non conformes ne réinitialisent pas correctement leurs données. Les pilotes clients qui gèrent ces appareils peuvent compenser ce défaut en désactivant la condition de blocage 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 blocage sur l’appareil sans réinitialiser le bouton bascule des 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.

Si elle est définie, l’URB est utilisé avec _URB_PIPE_REQUEST comme structure de données.

Cette fonction URB doit être envoyée à PASSIVE_LEVEL

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

URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE

Récupère le descripteur d’appareil à partir d’un périphérique USB spécifique. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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 un appareil sur un périphérique USB. Si elle est définie, l’URB est utilisé avec _URB_CONTROL_FEATURE_REQUEST comme structure de données.

URB_FUNCTION_GET_STATUS_FROM_DEVICE

Récupère l’état d’un appareil USB. Si elle est définie, l’URB est utilisé avec _URB_CONTROL_GET_STATUS_REQUEST comme structure de données.

URB_FUNCTION_GET_STATUS_FROM_INTERFACE

Récupère l’état d’une interface sur un périphérique USB. Si elle est définie, l’URB est utilisé avec _URB_CONTROL_GET_STATUS_REQUEST comme structure de données.

URB_FUNCTION_GET_STATUS_FROM_ENDPOINT

Récupère l’état d’un point de terminaison pour une interface sur un périphérique USB. Si elle est définie, l’URB est utilisé avec _URB_CONTROL_GET_STATUS_REQUEST comme structure de données.

URB_FUNCTION_GET_STATUS_FROM_OTHER

Récupère l’état d’une cible définie par l’appareil sur un appareil USB. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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. Si elle est définie, 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 des flux dans le point de terminaison en bloc spécifié. Si elle est définie, 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’une demande URB pour une requête open-stream, 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é. Si elle est définie, 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’une demande URB pour une requête open-stream, consultez Comment ouvrir et fermer des flux statiques dans un point de terminaison en bloc USB.

Status

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

UsbdDeviceHandle

Réservé. N’utilisez pas.

UsbdFlags

Réservé. N’utilisez pas.

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 adressée 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 à une utilisation système.

Exigences

Exigence Valeur
d’en-tête usb.h (include Usb.h)

Voir aussi

URB

structures 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