Blocs de requête USB (URBs)

Cet article décrit un bloc de requête USB (URB) et fournit des informations sur la façon dont un pilote client USB peut utiliser des routines WDM (Windows Driver Model) pour allouer, générer et envoyer des URBs à la pile de pilotes USB.

Un pilote client USB (Universal Serial Bus) ne peut pas communiquer directement avec son appareil. Au lieu de cela, le pilote client crée des requêtes et les envoie à la pile de pilotes USB pour traitement. Dans chaque requête, le pilote client fournit une structure de données de longueur variable appelée bloc de requête USB (URB). La structure URB décrit les détails de la demande et contient également des informations sur la status de la demande terminée. Le pilote client effectue toutes les opérations spécifiques à l’appareil, y compris les transferts de données, par le biais d’URBs. Le pilote client doit initialiser l’URB avec des informations sur la demande avant de l’envoyer à la pile de pilotes USB. Pour certains types de requêtes, Microsoft fournit des routines d’assistance et des macros qui allouent une structure URB et remplissent les membres nécessaires de la structure URB avec les détails fournis par le pilote client.

Chaque URB commence par un en-tête standard de taille fixe (_URB_HEADER) dont l’objectif est d’identifier le type d’opération demandée. Le membre Length de _URB_HEADER spécifie la taille, en octets, de l’URB. Le membre Function , qui doit faire partie d’une série de constantes URB_FUNCTION_XXX définies par le système, détermine le type d’opération demandée. Dans le cas de transferts de données, pour instance, ce membre indique le type de transfert. Les codes de fonction URB_FUNCTION_CONTROL_TRANSFER, URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER et URB_FUNCTION_ISOCH_TRANSFER indiquent respectivement les transferts de contrôle, de bloc/interruption et de transfert isochronieux. La pile de pilotes USB utilise le membre Status pour retourner un code status spécifique à l’USB.

Pour envoyer un URB, le pilote client utilise la requête IOCTL_INTERNAL_USB_SUBMIT_URB , qui est remise à l’appareil au moyen d’un paquet de demandes d’E/S (IRP) de type IRP_MJ_INTERNAL_DEVICE_CONTROL.

Une fois que la pile de pilotes USB a terminé de traiter l’URB, celle-ci utilise le membre Status de la structure URB pour retourner un code status spécifique à l’USB.

Notes

Les développeurs de pilotes KMDF et UMDF doivent utiliser les interfaces d’infrastructure respectives pour communiquer avec un périphérique USB. Pour plus d’informations, consultez Utilisation de périphériques USB pour les pilotes KMDF et Utilisation des interfaces USB dans UMDF. Ces rubriques traitent des interfaces de pilote WDM sous-jacentes utilisées pour la communication des périphériques USB.

Contenu de cette section

Rubrique Description
Allocation et génération d’URBs Cette rubrique décrit comment un pilote client USB peut utiliser des routines de pilotes WDM (Windows Driver Model) pour allouer et mettre en forme un URB avant d’envoyer la demande à la pile de pilotes USB fournie par Microsoft.
Comment envoyer un URB Cette rubrique décrit les étapes nécessaires pour envoyer un URB initialisé à la pile de pilotes USB afin de traiter une demande particulière.
Meilleures pratiques : Utilisation d’URBs Cette rubrique décrit les meilleures pratiques pour un pilote client pour l’allocation, la génération et l’envoi d’un URB à la pile de pilotes USB incluse avec Windows 8.