Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le descripteur d’appareil contient des informations sur un périphérique USB dans son ensemble. This article describes the USB_DEVICE_DESCRIPTOR structure and includes information about how a client driver can send a get-descriptor request to obtain the device descriptor.
Chaque périphérique USB (Universal Serial Bus) doit être en mesure de fournir un descripteur d’appareil unique qui contient des informations pertinentes sur l’appareil. The USB_DEVICE_DESCRIPTOR structure describes a device descriptor. Windows utilise ces informations pour dériver différents ensembles d’informations. For example, the idVendor and idProduct fields specify vendor and product identifiers, respectively. Windows uses those field values to construct a hardware ID for the device. Pour afficher l’ID matériel d’un appareil particulier :
- Open Device Manager.
- Right-click on the USB device and select Properties.
- Select the Details tab in the properties dialog box.
- Drop down the Property list.
- Select the Hardware Ids property
The values indicate the hardware IDs ("USB\XXX") that Windows generates.
The bcdUSB field of the USB_DEVICE_DESCRIPTOR structure indicates the version of the USB specification to which the device conforms. Par exemple, 0x0200 indique que l’appareil est conçu conformément à la spécification USB 2.0. The bcdDevice value indicates the device-defined revision number.
The USB driver stack uses bcdDevice, along with idVendor and idProduct, to generate hardware and compatible IDs for the device. You can view those identifiers in Device Manager. Le descripteur d’appareil indique également le nombre total de configurations que l’appareil prend en charge.
Un appareil peut signaler des informations différentes dans son descripteur d’appareil lorsque l’appareil se connecte à l’ordinateur hôte dans une capacité haute vitesse que lorsqu’il se connecte dans une capacité complète. Un appareil ne doit pas modifier les informations contenues dans le descripteur de l’appareil pendant la durée de vie d’une connexion, y compris pendant les changements d’état d’alimentation.
L’hôte obtient le descripteur d’appareil via un transfert de contrôle. Dans le transfert, le type de requête est GET DESCRIPTOR et le destinataire est l’appareil. Le pilote client peut lancer ce transfert de deux manières : à l’aide de l’objet périphérique cible USB framework ou en envoyant un URB avec les informations de requête.
Obtention du descripteur d’appareil
Un pilote client WDF (Windows Driver Frameworks) peut obtenir le descripteur d’appareil uniquement après la création de l’objet périphérique cible USB du framework.
A Kernel-Mode Driver Framework (KMDF) driver must obtain a WDFUSBDEVICE handle to the USB target device object by calling WdfUsbTargetDeviceCreate. Typically, a client driver calls WdfUsbTargetDeviceCreate in the driver's EvtDevicePrepareHardware callback implementation. After that, the client driver must call the WdfUsbTargetDeviceGetDeviceDescriptor method. After the call completes, the device descriptor is received in the caller-allocated USB_DEVICE_DESCRIPTOR structure.
A User-Mode Driver Framework (UMDF) driver must query the framework device object for an IWDFUsbTargetDevice pointer and then call the IWDFUsbTargetDevice::RetrieveDescriptor method and specify USB_DEVICE_DESCRIPTOR_TYPE as the descriptor type.
L’hôte peut également obtenir le descripteur d’appareil en envoyant un URB. Cette méthode s’applique uniquement aux pilotes en mode noyau. Toutefois, un pilote client ne doit jamais avoir à envoyer un URB pour ce type de requête, sauf si le pilote est basé sur le modèle de pilote Windows (WDM). Such a driver must allocate an URB structure and then call the UsbBuildGetDescriptorRequest macro to specify format the URB for the request. Le pilote peut ensuite envoyer la demande en envoyant l’URB à la pile de pilotes USB. Pour plus d’informations, consultez Comment envoyer un URB.
Cet exemple de code montre un appel UsbBuildGetDescriptorRequest qui met en forme la mémoire tampon pointée par pURB avec l’URB appropriée :
UsbBuildGetDescriptorRequest(
pURB, // Points to the URB to be formatted
sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST),
USB_DEVICE_DESCRIPTOR_TYPE,
0, // Not used for device descriptors
0, // Not used for device descriptors
pDescriptor, // Points to a USB_DEVICE_DESCRIPTOR structure
NULL,
sizeof(USB_DEVICE_DESCRIPTOR),
NULL
);
Exemple de descripteur d’appareil
Cet exemple montre le descripteur d’appareil pour un appareil webcam USB (voir disposition du périphérique USB), obtenu à l’aide de l’application USBView :
Device Descriptor:
bcdUSB: 0x0200
bDeviceClass: 0xEF
bDeviceSubClass: 0x02
bDeviceProtocol: 0x01
bMaxPacketSize0: 0x40 (64)
idVendor: 0x045E (Microsoft Corporation)
idProduct: 0x0728
bcdDevice: 0x0100
iManufacturer: 0x01
0x0409: "Microsoft"
iProduct: 0x02
0x0409: "Microsoft LifeCam VX-5000"
0x0409: "Microsoft LifeCam VX-5000"
iSerialNumber: 0x00
bNumConfigurations: 0x01
Dans l’exemple précédent, l’appareil a été développé conformément à la spécification USB, version 2.0. Note the bDeviceClass, bDeviceSubClass, and bDeviceProtocol values. Ces valeurs indiquent que l’appareil contient un ou plusieurs descripteurs d’association d’interface USB qui peuvent être utilisés pour regrouper plusieurs interfaces par fonction. Pour plus d’informations, consultez le descripteur de l’association d’interface USB.
Next, see the value of bMaxPacketSize0. Cette valeur indique la taille maximale des paquets du point de terminaison par défaut. Cet exemple d’appareil peut transférer jusqu’à 64 octets de données via son point de terminaison par défaut.
En règle générale, pour configurer l’appareil, le pilote client obtient des informations sur les configurations prises en charge dans l’appareil après avoir obtenu le descripteur de l’appareil. To determine the number of configurations that the device supports, inspect the bNumConfigurations member of the returned structure. Cet appareil prend en charge une configuration. Pour obtenir des informations sur une configuration USB, le pilote doit obtenir des descripteurs de configuration USB.