Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Дескриптор устройства содержит сведения о USB-устройстве в целом. 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.
Каждое устройство универсальной последовательной шины (USB) должно иметь возможность предоставить один дескриптор устройства, содержащий соответствующие сведения об устройстве. The USB_DEVICE_DESCRIPTOR structure describes a device descriptor. Windows использует эти сведения для получения различных наборов сведений. 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. Чтобы просмотреть идентификатор оборудования определенного устройства, выполните следующие действия.
- 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. Например, 0x0200 указывает, что устройство разработано как спецификация 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. Дескриптор устройства также указывает общее количество конфигураций, поддерживаемых устройством.
Устройство может сообщать различные сведения в дескрипторе устройства, когда устройство подключается к хост-компьютеру в высокой емкости, чем при подключении в полной емкости. Устройство не должно изменять сведения, содержащиеся в дескрипторе устройства во время существования подключения, в том числе во время изменений состояния питания.
Узел получает дескриптор устройства с помощью передачи элемента управления. При передаче тип запроса — GET DESCRIPTOR, а получатель — устройство. Драйвер клиента может инициировать передачу двумя способами: с помощью объекта USB-устройства платформы или отправки URB с информацией запроса.
Получение дескриптора устройства
Клиентский драйвер Windows Driver Framework (WDF) может получить дескриптор устройства только после создания объекта целевого устройства USB платформы.
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.
Узел также может получить дескриптор устройства, отправив URB. Этот метод применяется только к драйверам режима ядра. Однако драйвер клиента никогда не должен отправлять URB для этого типа запроса, если драйвер не основан на модели драйвера Windows (WDM). Such a driver must allocate an URB structure and then call the UsbBuildGetDescriptorRequest macro to specify format the URB for the request. Затем драйвер может отправить запрос, отправив URB в стек USB-драйверов. Дополнительные сведения см. в разделе "Отправка URB".
В этом примере кода показан вызов UsbBuildGetDescriptorRequest, который форматирует буфер, на который указывает pURB с соответствующим URB:
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
);
Пример дескриптора устройства
В этом примере показан дескриптор устройства USB-веб-камеры (см . макет USB-устройства), полученный с помощью приложения 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
В предыдущем примере устройство было разработано в спецификации USB версии 2.0. Note the bDeviceClass, bDeviceSubClass, and bDeviceProtocol values. Эти значения указывают на то, что устройство содержит один или несколько дескриптор связей USB-интерфейса, которые можно использовать для группировки нескольких интерфейсов для каждой функции. Дополнительные сведения см. в описании дескриптора ассоциации USB-интерфейса.
Next, see the value of bMaxPacketSize0. Это значение указывает максимальный размер пакета конечной точки по умолчанию. Этот пример устройства может передавать до 64 байт данных через конечную точку по умолчанию.
Как правило, чтобы настроить устройство, драйвер клиента получает сведения о поддерживаемых конфигурациях на устройстве после получения дескриптора устройства. To determine the number of configurations that the device supports, inspect the bNumConfigurations member of the returned structure. Это устройство поддерживает одну конфигурацию. Чтобы получить сведения о конфигурации USB, драйвер должен получить дескрипторы конфигурации USB.