Дескриптор USB-устройства
Устройство возвращает дескриптор USB-устройства, как определено в спецификации USB. В следующей таблице определены известные поля дескриптора USB-устройства.
Код класса устройства связи.
Код подкласса устройства связи, который в настоящее время не используется.
Код протокола устройства связи, который в настоящее время не используется.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Windows driver documentation
Дескрипторы USB-устройств
Дескриптор устройства содержит сведения о USB-устройстве в целом. В этом разделе описывается структура USB_DEVICE_DESCRIPTOR и содержатся сведения о том, как драйвер клиента может отправить запрос get-descriptor для получения дескриптора устройства.
Каждое устройство универсальной последовательной шины (USB) должно иметь возможность предоставить один дескриптор устройства, содержащий соответствующие сведения об устройстве. Структура USB_DEVICE_DESCRIPTOR описывает дескриптор устройства. Windows использует эти сведения для получения различных наборов информации. Например, в полях idVendor и idProduct указываются идентификаторы поставщика и продукта соответственно. Windows использует эти значения полей для создания идентификатора оборудования для устройства. Чтобы просмотреть идентификатор оборудования конкретного устройства, откройте диспетчер устройств и просмотрите свойства устройства. На вкладке Сведения значение свойства Hardware Ids указывает идентификатор оборудования («USB\XXX«), созданный Windows. Поле bcdUSB указывает версию спецификации USB, которой соответствует устройство. Например, 0x0200 указывает, что устройство разработано согласно спецификации USB 2.0. Значение bcdDevice указывает номер редакции, определяемый устройством. Стек драйверов USB использует bcdDevice, а также idVendor и idProduct для создания аппаратных и совместимых идентификаторов для устройства. Эти идентификаторы можно просмотреть в диспетчер устройств. Дескриптор устройства также указывает общее количество конфигураций, поддерживаемых устройством.
Если устройство подключено к хост-компьютеру с высокой скоростью, в дескрипторове устройства может передаваться другая информация, чем при подключении с полной скоростью. Устройство не должно изменять сведения, содержащиеся в дескрипторе устройства, в течение жизненного цикла подключения, в том числе во время изменения состояния питания.
Узел получает дескриптор устройства через передачу элемента управления. При передаче типом запроса является GET DESCRIPTOR, а получателем является устройство. Драйвер клиента может инициировать передачу двумя способами: с помощью целевого объекта целевого устройства ПЛАТФОРМы USB или путем отправки URB с информацией о запросе.
- Получение дескриптора устройства
- Пример дескриптора устройства
Получение дескриптора устройства
Драйвер клиента Windows Driver Framework (WDF) может получить дескриптор устройства только после создания объекта целевого устройства USB платформы.
Драйвер KMDF должен получить дескриптор WDFUSBDEVICE для объекта целевого устройства USB, вызвав WdfUsbTargetDeviceCreate. Как правило, драйвер клиента вызывает WdfUsbTargetDeviceCreate в реализации обратного вызова EvtDevicePrepareHardware драйвера. После этого драйвер клиента должен вызвать метод WdfUsbTargetDeviceGetDeviceDescriptor . После завершения вызова дескриптор устройства получается в структуре, выделенной вызывающим объектом USB_DEVICE_DESCRIPTOR .
Драйвер UMDF должен запросить объект устройства платформы для указателя IWDFUsbTargetDevice , а затем вызвать метод IWDFUsbTargetDevice::RetrieveDescriptor и указать USB_DEVICE_DESCRIPTOR_TYPE в качестве типа дескриптора.
Узел также может получить дескриптор устройства, отправив URB. Этот метод применяется только к драйверам в режиме ядра. Однако драйверу клиента никогда не нужно отправлять URB для этого типа запроса, если драйвер не основан на модели драйвера Windows (WDM). Такой драйвер должен выделить структуру URB , а затем вызвать макрос UsbBuildGetDescriptorRequest , чтобы указать формат URB для запроса. Затем драйвер может отправить запрос, отправив 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. Запишите значения bDeviceClass, bDeviceSubClass и bDeviceProtocol . Эти значения указывают, что устройство содержит один или несколько дескрипторов ассоциации usb-интерфейса, которые можно использовать для группировки нескольких интерфейсов для каждой функции. Дополнительные сведения см. в разделе Дескриптор ассоциации интерфейса USB.
Далее см. значение bMaxPacketSize0. Это значение указывает максимальный размер пакета конечной точки по умолчанию. Этот пример устройства может передавать до 64 байт данных через конечную точку по умолчанию.
Как правило, для настройки устройства драйвер клиента получает сведения о поддерживаемых конфигурациях на устройстве после получения дескриптора устройства. Чтобы определить количество конфигураций, поддерживаемых устройством, проверьте элемент bNumConfigurations возвращаемой структуры. Это устройство поддерживает одну конфигурацию. Чтобы получить сведения о конфигурации USB, драйвер должен получить дескрипторы конфигурации USB.
Связанные темы
- Дескрипторы USB
- Дескрипторы конфигурации USB
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Windows driver documentation
Дескрипторы USB
USB-устройство предоставляет сведения о себе в структурах данных, называемых дескрипторами USB. В этом разделе содержатся сведения о различных дескрипторах, которые драйвер клиента может получить с USB-устройства.
Узел получает дескрипторы от подключенного устройства, отправляя различные стандартные запросы управления (GET_DESCRIPTOR запросы) в конечную точку по умолчанию. Эти запросы указывают тип извлекаемого дескриптора. В ответ на такие запросы устройство отправляет дескрипторы, которые содержат сведения об устройстве, его конфигурациях, интерфейсах и связанных конечных точках. Дескрипторы устройств содержат сведения обо всем устройстве. Дескрипторы конфигурации содержат сведения о каждой конфигурации устройства. Дескрипторы строк содержат текстовые строки Юникода.
Каждое USB-устройство предоставляет дескриптор устройства, указывающий сведения о классе устройства, идентификаторы поставщика и продукта, а также количество конфигураций. Каждая конфигурация предоставляет свой дескриптор конфигурации, который указывает количество интерфейсов и характеристики питания. Каждый интерфейс предоставляет дескриптор интерфейса для каждого из своих альтернативных параметров, содержащий сведения о классе и количестве конечных точек. Каждая конечная точка в каждом интерфейсе предоставляет дескрипторы конечных точек, которые указывают тип конечной точки и максимальный размер пакета.
Например, рассмотрим макет устройства платы OSR FX2, описанный в разделе Макет USB-устройства. На уровне устройства устройство предоставляет дескриптор устройства и дескриптор конечной точки для конечной точки по умолчанию. На уровне конфигурации устройство предоставляет дескриптор конфигурации для конфигурации 0. На уровне интерфейса он предоставляет один дескриптор интерфейса для альтернативного параметра 0. На уровне конечной точки он предоставляет три дескриптора конечной точки.
В этом разделе
| Статья | Описание |
|---|---|
| Дескрипторы USB-устройств | Дескриптор устройства содержит сведения о USB-устройстве в целом. В этой статье описывается структура USB_DEVICE_DESCRIPTOR и содержатся сведения о том, как драйвер клиента может отправить запрос get-descriptor для получения дескриптора устройства. |
| Дескрипторы конфигурации USB | USB-устройство предоставляет свои возможности в виде ряда интерфейсов, называемых конфигурацией USB. Каждый интерфейс состоит из одного или нескольких альтернативных параметров, и каждый альтернативный параметр состоит из набора конечных точек. В этой статье описываются различные дескрипторы, связанные с конфигурацией USB. |
| Дескрипторы строки USB | Дескрипторы устройств, конфигурации и интерфейса могут содержать ссылки на дескрипторы строк. В этой статье описывается, как получить определенный дескриптор строки с устройства. |
| Дескриптор ассоциации интерфейса USB | Дескриптор ассоциации интерфейса USB (IAD) позволяет устройству группировать интерфейсы, принадлежащие функции. В этой статье описывается, как драйвер клиента может определить, содержит ли устройство IAD для функции. |
Связанные темы
- Макет USB-устройства
- Руководство по разработке usb-драйвера
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Windows driver documentation
Сбой запроса дескриптора устройства (код 43) в Windows 10 и 8

Если при подключении чего-либо по USB в Windows 10 или Windows 8 (8.1) — флешки, телефона, планшета, плеера или чего-либо еще (а иногда и просто кабеля USB) вы видите в диспетчере устройств Неизвестное USB-устройство и сообщение об «Сбой запроса дескриптора устройства» с указанием ошибки Код 43 (в свойствах), в этой инструкции постараюсь дать работающие способы исправить эту ошибку. Еще один вариант этой же ошибки — сбой сброса порта.
Обновление драйверов Составного USB устройства и Корневых USB-концентраторов

Если до настоящего момента подобных проблем замечено не было, а ваше устройство начало определяться как «Неизвестное USB-устройство» ни с того ни с сего, рекомендую начать с этого способа решения проблемы, как с самого простого и, обычно, самого работоспособного.
- Зайдите в диспетчер устройств Windows. Сделать это можно, нажав клавиши Windows + R и введя devmgmt.msc (или через правый клик по кнопке «Пуск»).
- Откройте раздел «Контроллеры USB».
- Для каждого из устройств Generic USB Hub, Корневой USB-концентратор и Составное USB устройство выполните следующие действия.

- Кликните по устройству правой кнопкой мыши, выберите пункт «Обновить драйверы».
- Выберите пункт «Выполнить поиск драйверов на этом компьютере».
- Выберите «Выбрать из списка уже установленных драйверов».
- В списке (там, вероятнее всего будет лишь один совместимый драйвер) выберите его и нажмите «Далее».

И так для каждого из указанных устройств. Что должно произойти (в случае успеха): при обновлении (а точнее — переустановке) одного из этих драйверов ваше «Неизвестное устройство» исчезнет и снова появится, уже как опознанное. После этого, с остальными драйверами продолжать это необязательно.
Дополнительно: если сообщение о том, что USB устройство не опознано появляется у вас в Windows 10 и только при подключении к USB 3.0 (проблема типична для ноутбуков, обновленных до новой ОС), то здесь обычно помогает замена стандартного, устанавливаемого самой ОС драйвера Расширяемый хост-контроллер Intel USB 3.0 на тот драйвер, который имеется на официальном сайте производителя ноутбука или материнской платы. Также для этого устройства в диспетчере устройств можно попробовать и метод, описанный ранее (обновление драйверов).
Параметры энергосбережения USB
Если предыдущий способ сработал, а через некоторое время ваша Windows 10 или 8-ка снова начала писать о сбое дескриптора устройства и код 43, тут может помочь дополнительное действие — отключение функций энергосбережения для USB-портов.
Для этого, также, как и в предыдущем способе, зайдите в диспетчер устройств и для всех устройств Generic USB Hub, Корневой USB концентратор и Составное USB устройство откройте через правый клик «Свойства», а затем на вкладке «Управление электропитанием» отключите параметр «Разрешить отключение этого устройства для экономии энергии». Примените сделанные настройки.

Неправильная работа USB устройств из-за проблем с питанием или статического электричества
Достаточно часто проблемы с работой подключаемых USB устройств и сбоем дескриптора устройства можно решить простым обесточиванием компьютера или ноутбука. Как это сделать для ПК:
- Извлеките проблемные USB-устройства, выключите компьютер (через завершение работы, лучше, при нажатии «Завершение работы» удерживать Shift, для полного его выключения).
- Выключите его из розетки.
- Нажмите и держите кнопку питания нажатой секунд 5-10 (да, на выключенном из розетки компьютере), отпустите.
- Включите компьютер в сеть и просто включите его как обычно.
- Подключите USB устройство снова.
Драйвера на чипсет
И еще один пункт, который может вызывать сбой запроса дескриптора USB-устройства или сбой сброса порта — не установленные официальные драйвера на чипсет (которые следует брать с официального сайта производителя ноутбука для вашей модели или с сайта производителя материнской платы компьютера). Те, что устанавливает сама Windows 10 или 8, а также драйвера из драйвер-пака не всегда оказываются полностью рабочими (хотя в диспетчере устройств вы, вероятнее всего, увидите, что все устройства работают нормально, за исключением неопознанного USB).
К таким драйверам могут относиться
- Intel Chipset Driver
- Intel Management Engine Interface
- Различные Firmware утилиты специфичные для ноутбуков
- ACPI Driver
- Иногда, отдельные драйвера USB для сторонних контроллеров на материнской плате.
Не поленитесь зайти на сайт производителя в раздел поддержки и проверить наличие таких драйверов. Если они отсутствуют для вашей версии Windows, можно попробовать установку предыдущих версий в режиме совместимости (главное, чтобы совпадала разрядность).
На данный момент это всё, что я могу предложить. Нашли собственные решения или сработало что-то из описанного? — буду рад, если поделитесь в комментариях.
А вдруг и это будет интересно:
- Лучшие бесплатные программы для Windows
- Не удалось запустить службу Windows Audio на Локальный компьютер — как исправить?
- Ошибка DXGI ERROR DEVICE HUNG — как исправить?
- Как сбросить Windows на заводские настройки в командной строке
- Как создать отчет о работе Wi-Fi сети в Windows 11 и 10
- Устройство tap0901 — что это и как установить драйвер?
- Windows 11
- Windows 10
- Android
- Загрузочная флешка
- Лечение вирусов
- Восстановление данных
- Установка с флешки
- Настройка роутера
- Всё про Windows
- В контакте
- Одноклассники
-
Кирилл 21.10.2023 в 15:36
- Dmitry 22.10.2023 в 11:31