Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El descriptor de dispositivo contiene información sobre un dispositivo USB en su conjunto. 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.
Cada dispositivo de bus serie universal (USB) debe ser capaz de proporcionar un único descriptor de dispositivo que contenga información relevante sobre el dispositivo. The USB_DEVICE_DESCRIPTOR structure describes a device descriptor. Windows usa esa información para derivar varios conjuntos de información. 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. Para ver el identificador de hardware de un dispositivo determinado:
- 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. Por ejemplo, 0x0200 indica que el dispositivo está diseñado según la especificación 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. El descriptor de dispositivo también indica el número total de configuraciones que admite el dispositivo.
Un dispositivo puede notificar información diferente en su descriptor de dispositivo cuando el dispositivo se conecta al equipo host en una capacidad de alta velocidad que cuando se conecta en una capacidad de velocidad completa. Un dispositivo no debe cambiar la información contenida en el descriptor de dispositivo durante la vigencia de una conexión, incluido durante los cambios de estado de energía.
El host obtiene el descriptor de dispositivo a través de una transferencia de control. En la transferencia, el tipo de solicitud es GET DESCRIPTOR y el destinatario es el dispositivo. El controlador cliente puede iniciar esa transferencia de dos maneras: mediante el uso del objeto de dispositivo de destino USB del marco o mediante el envío de un URB con la información de solicitud.
Obtención del descriptor de dispositivo
Un controlador cliente de Windows Driver Frameworks (WDF) solo puede obtener el descriptor de dispositivo después de crear el objeto de dispositivo de destino USB del marco.
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.
El host también puede obtener el descriptor de dispositivo mediante el envío de un URB. Este método solo se aplica a los controladores en modo kernel. Sin embargo, un controlador cliente nunca debe tener que enviar un URB para este tipo de solicitud a menos que el controlador se base en windows Driver Model (WDM). Such a driver must allocate an URB structure and then call the UsbBuildGetDescriptorRequest macro to specify format the URB for the request. Después, el controlador puede enviar la solicitud enviando el URB a la pila del controlador USB. Para obtener más información, vea Cómo enviar un URB.
En este ejemplo de código se muestra una llamada a UsbBuildGetDescriptorRequest que da formato al búfer al que apunta pURB con el URB adecuado:
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
);
Descriptor de dispositivo de ejemplo
En este ejemplo se muestra el descriptor de dispositivo para un dispositivo cámara web USB (consulte Diseño del dispositivo USB), obtenido mediante la aplicación 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
En el ejemplo anterior, el dispositivo se desarrolló según la especificación USB, versión 2.0. Note the bDeviceClass, bDeviceSubClass, and bDeviceProtocol values. Esos valores indican que el dispositivo contiene uno o varios descriptores de asociación de interfaz USB que se pueden usar para agrupar varias interfaces por función. Para obtener más información, consulte Descriptor de asociación de interfaz USB.
Next, see the value of bMaxPacketSize0. Este valor indica el tamaño máximo de paquete del punto de conexión predeterminado. Este dispositivo de ejemplo puede transferir hasta 64 bytes de datos a través de su punto de conexión predeterminado.
Normalmente, para configurar el dispositivo, el controlador cliente obtiene información sobre las configuraciones admitidas en el dispositivo después de obtener el descriptor de dispositivo. To determine the number of configurations that the device supports, inspect the bNumConfigurations member of the returned structure. Este dispositivo admite una configuración. Para obtener información sobre una configuración USB, el controlador debe obtener descriptores de configuración USB.