Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Gerätedeskriptor enthält Informationen zu einem USB-Gerät als Ganzes. 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.
Jedes USB-Gerät (Universal Serial Bus) muss einen einzelnen Gerätedeskriptor bereitstellen können, der relevante Informationen zum Gerät enthält. The USB_DEVICE_DESCRIPTOR structure describes a device descriptor. Windows verwendet diese Informationen, um verschiedene Informationssätze abzuleiten. 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. So zeigen Sie die Hardware-ID eines bestimmten Geräts an:
- 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. Beispielsweise gibt 0x0200 an, dass das Gerät gemäß der USB 2.0-Spezifikation entworfen wurde. 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. Der Gerätedeskriptor gibt auch die Gesamtanzahl der Konfigurationen an, die das Gerät unterstützt.
Ein Gerät meldet möglicherweise andere Informationen in der Gerätebeschreibung, wenn das Gerät eine Verbindung mit dem Hostcomputer in hoher Geschwindigkeit herstellt, als wenn es in voller Geschwindigkeit verbunden ist. Ein Gerät darf die informationen, die im Gerätedeskriptor enthalten sind, während der Lebensdauer einer Verbindung, einschließlich während der Energiezustandsänderungen, nicht ändern.
Der Host ruft den Gerätedeskriptor über eine Steuerungsübertragung ab. Bei der Übertragung ist der Anforderungstyp GET DESCRIPTOR, und der Empfänger ist das Gerät. Der Clienttreiber kann diese Übertragung auf zwei Arten initiieren: mithilfe des Framework-USB-Zielgeräteobjekts oder durch Senden einer URB mit den Anforderungsinformationen.
Abrufen des Gerätedeskriptors
Ein Windows Driver Frameworks (WDF)-Clienttreiber kann den Gerätedeskriptor erst abrufen, nachdem das Framework-USB-Zielgerätobjekt erstellt wurde.
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.
Der Host kann auch den Gerätedeskriptor abrufen, indem er eine URB sendet. Diese Methode gilt nur für Kernelmodustreiber. Ein Clienttreiber sollte jedoch nie eine URB für diesen Anforderungstyp senden müssen, es sei denn, der Treiber basiert auf dem Windows-Treibermodell (WDM). Such a driver must allocate an URB structure and then call the UsbBuildGetDescriptorRequest macro to specify format the URB for the request. Der Treiber kann dann die Anforderung senden, indem er die URB an den USB-Treiberstapel sendet. Weitere Informationen finden Sie unter How to Submit an URB.For more information, see How to Submit an URB.
Dieses Codebeispiel zeigt einen UsbBuildGetDescriptorRequest-Aufruf, der den puffer formatiert, auf den pURB mit der entsprechenden URB verweist:
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
);
Beispielgerätedeskriptor
Dieses Beispiel zeigt den Gerätedeskriptor für ein USB-Webcamgerät (siehe USB-Gerätelayout), das mithilfe der USBView-Anwendung abgerufen wird:
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
Im vorherigen Beispiel wurde das Gerät gemäß USB-Spezifikation, Version 2.0, entwickelt. Note the bDeviceClass, bDeviceSubClass, and bDeviceProtocol values. Diese Werte deuten darauf hin, dass das Gerät einen oder mehrere USB-Schnittstellenzuordnungsdeskriptoren enthält, die zum Gruppieren mehrerer Schnittstellen pro Funktion verwendet werden können. Weitere Informationen finden Sie unter USB Interface Association Descriptor.
Next, see the value of bMaxPacketSize0. Dieser Wert gibt die maximale Paketgröße des Standardendpunkts an. Dieses Beispielgerät kann bis zu 64 Byte Daten über seinen Standardendpunkt übertragen.
Zum Konfigurieren des Geräts ruft der Clienttreiber in der Regel Informationen zu den unterstützten Konfigurationen auf dem Gerät ab, nachdem die Gerätebeschreibung abgerufen wurde. To determine the number of configurations that the device supports, inspect the bNumConfigurations member of the returned structure. Dieses Gerät unterstützt eine Konfiguration. Um Informationen zu einer USB-Konfiguration zu erhalten, muss der Treiber USB-Konfigurationsdeskriptoren abrufen.