Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как Windows распознает устройство WinUSB. Производители и независимые поставщики оборудования (IHV) могут использовать сведения, приведенные в этой статье, для разработки устройства, использующего Winusb.sys в качестве драйвера функции. В этой статье показано, как автоматически загрузить драйвер без необходимости предоставлять пользовательский файл сведений (INF).
Что такое устройство WinUSB
Устройство WinUSB — это устройство универсальной последовательной шины (USB), встроенное ПО которого определяет определенные дескрипторы компонентов операционной системы Майкрософт (OS), которые сообщают WINUSB в качестве совместимого идентификатора.
Цель устройства WinUSB — разрешить Windows загружать Winusb.sys в качестве драйвера функции устройства без пользовательского INF-файла. Для устройства WinUSB не требуется распространять INF-файлы для устройства, что упрощает процесс установки драйвера для конечных пользователей. И наоборот, если необходимо предоставить пользовательский INF-файл, не следует определять устройство как устройство WinUSB и указать идентификатор оборудования устройства в INF.
Корпорация Майкрософт предоставляет файл Winusb.inf, содержащий сведения, необходимые для установки Winusb.sys в качестве драйвера устройства для USB-устройства.
До Windows 8, чтобы загрузить Winusb.sys в качестве драйвера функции, необходимо было предоставить пользовательский INF-файл. Пользовательский INF-файл указывает аппаратный идентификатор для конкретного устройства, а также содержит разделы из стандартного Winusb.inf. Эти разделы необходимы для создания экземпляра службы, копирования исходников и регистрации GUID интерфейса устройства, которые приложения требуют для поиска устройства и взаимодействия с ним. Дополнительные сведения см. в статье "Написание настраиваемого INF для установки WinUSB".
В Windows 8 обновляется файл Winusb.inf, встроенный в систему, чтобы Windows автоматически связывал INF с устройством WinUSB.
Установка устройства WinUSB с помощью встроенного Winusb.inf
В Windows 8 обновляется встроенный файл Winusb.inf. INF содержит раздел установки, который ссылается на совместимый идентификатор с именем USB\MS_COMP_WINUSB.
[Generic.Section.NTamd64]
%USB\MS_COMP_WINUSB.DeviceDesc%=WINUSB,USB\MS_COMP_WINUSB
Обновленный INF также включает новый класс установки с именем USBDevice.
Класс установки USBDevice доступен для тех устройств, для которых корпорация Майкрософт не предоставляет встроенный драйвер. Как правило, такие устройства не относятся к хорошо определенным USB-классам, таким как Аудио или Bluetooth, и требуют пользовательского драйвера. Если устройство является устройством WinUSB, скорее всего, устройство не принадлежит к USB-классу. Устройство должно быть установлено в классе установки USBDevice. Обновленный Winusb.inf упрощает это требование.
Сведения об использовании класса USBDevice
Не используйте класс установки USB для неклассифицированных устройств. Этот класс зарезервирован для установки контроллеров, концентраторов и составных устройств. Неправильное использованием USB-класса может привести к значительным проблемам надежности и производительности. Используйте USBDevice для неклассифицированных устройств.
В Windows 8 добавьте это определение в INF-файл для использования класса устройства USBDevice:
[Version]
...
Class=USBDevice
ClassGuid={88BAE032-5A81-49f0-BC3D-A4FF138216D6}
...
В диспетчере устройств см. новый узел, называемый устройствами универсальной последовательной шины USB. Ваше устройство появляется под этим узлом.
В Windows 7 в дополнение к предыдущим строкам необходимо создать эти параметры реестра в INF:
;---------- Add Registry Section ----------
[USBDeviceClassReg]
HKR,,,,"Universal Serial Bus devices"
HKR,,NoInstallClass,,1
HKR,,SilentInstall,,1
HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
В диспетчере устройств устройство отображается в устройства универсальной последовательной шины USB. Описание класса устройства является производным от параметра реестра, указанного в INF.
Класс USBDevice не ограничен только драйвером WinUSB для Windows. Если у вас есть пользовательский драйвер для вашего устройства, вы можете использовать класс установки USBDevice в пользовательском файле INF.
Во время перечисления устройств стек USB-драйверов считывает совместимый идентификатор с устройства. Если WINUSB это совместимый идентификатор, Windows использует его в качестве идентификатора устройства и находит совпадение в обновленном in-box Winusb.inf, а затем загружает Winusb.sys в качестве драйвера функции устройства.
Это изображение предназначено для устройства Microsoft USB Test Tool (MUTT) с одним интерфейсом, которое определяется как устройство WinUSB, и в результате загружается Winusb.sys в качестве функционального драйвера для этого устройства.
Для версий Windows, предшествующих Windows 8, обновленный Winusb.inf доступен через Центр обновления Windows. Если компьютер настроен на автоматическое обновление драйвера, драйвер WinUSB устанавливается без вмешательства пользователя с помощью нового пакета INF.
Как изменить описание устройства для устройства WinUSB
Для устройства WinUSB диспетчер устройств отображает WinUsb Device в поле «Описание устройства». Эта строка является производным от Winusb.inf. При наличии нескольких устройств WinUSB все устройства получают одно и то же описание устройства.
Для уникальной идентификации и дифференцировки устройства в Диспетчере устройств Windows 8 предоставляет новое свойство класса устройств. Свойство указывает системе дать приоритет описанию устройства, сообщаемого устройством в дескрипторе строки iProduct по сравнению с описанием в INF. Класс USBDevice, определенный в Windows 8, задает это свойство.
Если устройство установлено в класс USBDevice, Windows запрашивает описание устройства у устройства и устанавливает строку диспетчера устройств в соответствии с полученным в запросе описанием. В этом случае описание устройства, предоставленное в INF, игнорируется. Обратите внимание на строки описания устройства: MUTT на предыдущем изображении. USB-устройство предоставляет строку в дескрипторе продуктовой строки.
Новое свойство класса не поддерживается в более ранних версиях Windows. Чтобы настроить описание устройства в более ранней версии Windows, необходимо написать собственный пользовательский INF-файл.
Настройка устройства WinUSB
Чтобы определить USB-устройство как устройство WinUSB, встроенное ПО устройства должно иметь дескрипторы ОС Майкрософт. Дополнительные сведения см. в разделе дескрипторов ОС Майкрософт для USB-устройств.
Поддержка дескрипторов расширенных функций
Чтобы стек USB-драйверов знал, что устройство поддерживает расширенные дескрипторы функций, устройство должно определить дескриптор строки ОС, хранящийся в строковом индексе 0xEE. Во время перечисления стек драйверов запрашивает строковый дескриптор. Если дескриптор присутствует, стек драйверов предполагает, что устройство содержит один или несколько дескрипторов компонентов ОС и данные, необходимые для получения этих дескрипторов компонентов.
Дескриптор полученной строки имеет значение поля bMS_VendorCode. Значение указывает код производителя, который стек USB-драйверов должен использовать для получения дескриптора расширенной функции.
Чтобы определить дескриптор строки ОС, ознакомьтесь с дескрипторами ОС Майкрософт для USB-устройств.
Настройка совместимого идентификатора
Чтобы соответствовать встроенному Winusb.inf и загрузить модуль драйвера WinUSB, требуется дескриптор функции ОС с расширенным совместимым идентификатором.
Дескриптор функции расширенной совместимой ОС идентификаторов включает раздел заголовка, за которым следует один или несколько разделов функций, в зависимости от того, является ли устройство составным или некомпосиентным. Раздел заголовка указывает длину всего дескриптора, количество разделов функций и номер версии.
За заголовком для некомпоситового устройства следует один раздел функции, связанный только с интерфейсом устройства. Поле compatibleID в этом разделе должно иметь WINUSB в качестве значения. Для составного устройства существует несколько разделов функций. Поле совместимого ИДЕНТИФИКАТОРа каждого раздела функции должно указывать WINUSB.
Регистрация GUID для интерфейса устройства
Для регистрации GUID интерфейса устройства требуется дескриптор функции ОС расширенных свойств. Идентификатор GUID необходим для поиска устройства из приложения или службы, настройки устройства и выполнения операций ввода-вывода.
В предыдущих версиях Windows регистрация GUID интерфейса устройства выполняется с помощью настраиваемого INF. Начиная с Windows 8, устройство должно сообщать идентификатор GUID интерфейса, используя дескриптор возможностей ОС для дополнительных свойств.
Дескриптор расширенных свойств ОС содержит раздел заголовка, за которым следует один или несколько разделов настраиваемых свойств. В разделе заголовка описывается весь дескриптор расширенных свойств, включая общую длину, номер версии и количество разделов настраиваемых свойств. Чтобы зарегистрировать GUID интерфейса устройства, добавьте раздел настраиваемого свойства, который задает для поля bPropertyName значение DeviceInterfaceGUID и wPropertyNameLength в 40 байт.
Создайте уникальный GUID интерфейса устройства с помощью генератора GUID и задайте для поля bPropertyData значение GUID, например {8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}. GUID указывается в виде строки Юникода, а длина строки составляет 78 байт, включая конечный элемент NULL.
| bPropertyData | 78 байт | 7B 00 38 00 46 00 45 00 36 00 44 00 34 00 44 00 37 00 2D 00 34 00 39 00 00 44 00 2D 00 34 00 31 00 45 00 37 00 2D 00 39 00 34 00 38 00 36 00 2D 00 34 00 39 00 41 00 46 00 43 00 36 00 42 00 46 00 45 00 34 00 37 00 35 00 7D 00 00 00 | Значение свойства : {8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}. |
Во время перечисления устройств стек USB-драйверов извлекает значение DeviceInterfaceGUID из дескриптора функции ОС расширенных свойств и регистрирует устройство в аппаратном ключе устройства. Приложение может получить значение с помощью API SetupDiXxx. См. раздел SetupDiOpenDevRegKey. Дополнительные сведения см. в статье "Доступ к USB-устройству" с помощью функций WinUSB.
Включение или отключение функций управления питанием WinUSB
До Windows 8, чтобы настроить функции управления питанием WinUSB, вам нужно было написать значения записей реестра в раздел HW.AddReg вашего пользовательского INF.
В Windows 8 и более поздних версиях можно указать параметры питания на устройстве. Вы можете сообщать о значениях с помощью дескриптора расширенных свойств ОС, который включает или отключает функции в WinUSB для этого устройства. Можно настроить два компонента: выборочная приостановка и пробуждение системы. Функция выборочного приостановления позволяет устройству переходить в состояние низкого энергопотребления, когда оно не используется. Пробуждение системы относится к способности устройства проснуть систему, когда система находится в состоянии низкой мощности.
Дополнительные сведения см. в разделе "Управление питанием WinUSB".
| Имя свойства | Описание |
|---|---|
| ВключениеРежимаОжиданияУстройства | Это значение установлено в 1, чтобы указать, что устройство может отключиться при бездействии (выборочная приостановка). |
| DefaultIdleState | Это значение имеет значение 1, чтобы указать, что устройство может быть приостановлено при простое по умолчанию. |
| DefaultIdleTimeout | Это значение имеет значение 5000 в миллисекундах, чтобы указать время ожидания в миллисекундах перед определением простоя устройства. |
| ПользовательВключилОжиданиеУстройства | Это значение имеет значение 1, чтобы разрешить пользователю управлять возможностью устройства включить или отключить выборочную приостановку USB. Установите флажок "Разрешить компьютеру отключить это устройство, чтобы сохранить питание на странице свойств управления питанием устройства". Пользователи могут включить или отключить выборочную приостановку USB. |
| АктивированоПробуждениеСистемы | Это значение имеет значение 1, чтобы разрешить пользователю управлять способностью устройства проснуть систему из состояния низкой мощности. Если этот параметр включен, флажок "Разрешить этому устройству проснуть компьютер" появится на странице свойств управления питанием устройства. Пользователь может включить или отключить пробуждение системы через USB. |
Например, чтобы включить выборочную приостановку на устройстве, добавьте раздел пользовательского свойства, который задает поле bPropertyName строкой DeviceIdleEnabled Юникода и wPropertyNameLength значением 36 байт. Задайте для поля bPropertyData значение 0x00000001. Значения свойств хранятся в виде 32-разрядных целых чисел.
Во время перечисления стек драйверов USB считывает дескрипторы функции расширенных свойств и создает записи в реестре по этому ключу.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\USB\<Идентификатор устройства>\<Идентификатор экземпляра>\Device Parameters
На этом рисунке показаны примеры параметров для устройства WinUSB.
Дополнительные примеры см. в дескрипторах ОС Майкрософт.