Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Для некоторых устройств универсальной последовательной шины (USB) можно установить WinUSB (Winusb.sys) вместо реализации драйвера.
Внимание
Эта статья предназначена для программистов. Если у вас возникли проблемы с USB, см. статью "Устранение проблем с USB-C в Windows"
Автоматическая установка WinUSB без INF-файла
Как изготовитель оборудования или независимый поставщик оборудования (IHV), вы можете создать устройство таким образом, чтобы Winusb.sys устанавливается автоматически. Такое устройство называется устройством WinUSB и не требует написания пользовательского INF-файла, который ссылается на in-box Winusb.inf.
При подключении устройства WinUSB Windows считывает сведения об устройстве и загружает Winusb.sys автоматически.
Дополнительные сведения см. в разделе "Устройство WinUSB".
Установка WinUSB путем указания класса устройства, предоставленного системой
При подключении устройства вы можете заметить, что Windows загружает Winusb.sys автоматически. В противном случае выполните следующие инструкции, чтобы загрузить драйвер:
- Подключите устройство к хост-системе.
- Откройте диспетчер устройств и найдите устройство.
- Щелкните правой кнопкой мыши устройство и выберите "Обновить программное обеспечение драйвера... " в контекстном меню.
- В мастере выберите Выполнить поиск драйверов на моем компьютере.
- Выберите Разрешить мне выбрать из списка драйверов устройств на моем компьютере.
- В списке классов устройств выберите устройства универсальной последовательной шины.
- Мастер показывает WinUsb Device. Выберите его для загрузки драйвера.
Если устройства универсальной последовательной шины не отображаются в списке классов устройств, необходимо установить драйвер с помощью пользовательского INF-файла. Предыдущая процедура не добавляет GUID интерфейса устройства для того, чтобы приложения (будь то UWP или классические приложения Windows) могли получить доступ к устройству. Чтобы добавить GUID вручную, выполните следующую процедуру.
Загрузите драйвер, как описано в предыдущей процедуре.
Создайте GUID интерфейса устройства для вашего устройства с помощью такого средства, как guidgen.exe.
Найдите ключ реестра для устройства под этим ключом:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<VID_vvvv&PID_pppp>
В разделе Device Parameters добавьте строковую запись реестра с именем DeviceInterfaceGUID или запись типа Multi-String с именем DeviceInterfaceGUIDs. Задайте значение GUID, созданного на шаге 2.
Отключите устройство от системы и повторно подключите его к одному физическому порту.
Примечание.
При изменении физического порта необходимо повторить шаги 1–4.
Создание пользовательского INF-файла для WinUSB
В составе пакета драйвера предоставляется INF-файл, который устанавливает Winusb.sys в качестве драйвера функции для USB-устройства.
Ниже приведен пример универсального INF-файла, допустимого для платформ x64 и ARM64 под управлением Windows 10 или более поздней версии. В этом примере нет соустановщиков, что позволяет подписывать на портале панели управления Центра разработчиков оборудования.
;
; Universal INF file for WinUsb installation
;
[Version]
Signature = "$Windows NT$"
Class = USBDevice
ClassGUID = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
Provider = %ManufacturerName%
CatalogFile = WinUSBInstallation.cat
DriverVer = 09/04/2012,13.54.20.543
PnpLockdown = 1
; ========== Manufacturer and Models sections ===========
[Manufacturer]
%ManufacturerName% = Standard,NTamd64,NTarm64
[Standard.NTamd64]
%DeviceName% =USB_Install, USB\VID_0547&PID_1002
[Standard.NTarm64]
%DeviceName% =USB_Install, USB\VID_0547&PID_1002
; =================== Installation ===================
[USB_Install]
Include = winusb.inf
Needs = WINUSB.NT
[USB_Install.Services]
Include =winusb.inf
Needs = WINUSB.NT.Services
[USB_Install.HW]
AddReg=Dev_AddReg
[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{9f543223-cede-4fa3-b376-a25ce9a30e74}"
; =================== Strings ===================
[Strings]
ManufacturerName="Contoso"
ClassName="Universal Serial Bus devices"
DeviceName="Fx2 Learning Kit Device"
REG_MULTI_SZ = 0x00010000
Этот универсальный INF-файл можно использовать на нескольких платформах Windows (x64 и ARM64) и может быть подписан на портале панели мониторинга Центра разработчиков оборудования .
Чтобы установить только новый класс настройки пользовательского устройства, добавьте раздел ClassInstall32 в INF-файл устройства. INF-файлы для устройств в установленном классе, независимо от того, является ли это системный класс установки устройства или пользовательский класс, не должны включать раздел ClassInstall32.
За исключением значений, относящихся к устройству, и некоторых проблем, отмеченных в следующем списке, можно использовать эти разделы и директивы для установки WinUSB для любого USB-устройства. Эти элементы списка описывают Includes и Directives в предыдущем INF-файле.
USB_Install: Директивы Include и Needs в разделе USB_Install требуются для установки WinUSB. Эти директивы не следует изменять.
USB_Install.Services: директива Include в разделе USB_Install.Services содержит предоставленный системой INF-файл для WinUSB (Winusb.inf). Windows устанавливает этот INF-файл, если он еще не установлен в целевой системе. Директива Needs указывает раздел в Winusb.inf , содержащий сведения, необходимые для установки Winusb.sys в качестве драйвера функции устройства. Эти директивы не следует изменять.
USB_Install.HW: этот раздел является ключом в INF-файле. Он задает глобальный уникальный идентификатор интерфейса устройства (GUID) для вашего устройства. Директива AddReg задает указанный GUID интерфейса в стандартном значении реестра. Когда Winusb.sys загружается в качестве драйвера функции устройства, он считывает значение реестра ключа DeviceInterfaceGUIDs и использует указанный GUID для представления интерфейса устройства. Вы должны заменить GUID в этом примере на тот, который вы создаете специально для вашего устройства. Если протоколы для устройства изменяются, создайте новый GUID интерфейса устройства.
Примечание.
Программное обеспечение в режиме пользователя должно вызвать SetupDiGetClassDevs , чтобы перечислить зарегистрированные интерфейсы устройств, связанные с одним из классов интерфейса устройства, указанных в ключе DeviceInterfaceGUIDs. SetupDiGetClassDevs возвращает дескриптор устройства, которое программное обеспечение в пользовательском режиме должно затем передать в подпрограмму WinUsb_Initialize , чтобы получить дескриптор WinUSB для интерфейса устройства. Дополнительные сведения об этих подпрограммах см. в статье "Доступ к USB-устройству с помощью функций WinUSB".
Каждый раз при загрузке Winusb.sys он регистрирует интерфейс устройства с классами, указанными в реестре под ключом DeviceInterfaceGUIDs.
HKR,,DeviceInterfaceGUIDs, 0x10000,"{D696BFEB-1734-417d-8A04-86D01071C512}"
Создание пакета драйверов, который устанавливает Winusb.sys
Чтобы использовать WinUSB в качестве драйвера функции устройства, создайте пакет драйвера. Ниже приведены инструкции по созданию пакета драйвера, который устанавливает Winusb.sys:
Скачайте комплект драйверов Windows (WDK) и установите его на компьютере.
Создайте папку пакета драйверов в системе, где подключено USB-устройство, например C:\UsbDevice.
Напишите INF-файл, который устанавливает Winusb.sys в качестве драйвера функции для USB-устройства и сохраните его в папке пакета драйвера. Пример записи этого файла можно найти в разделе "Написание настраиваемого INF для WinUSB" этого документа.
Создайте подписанный файл каталога для пакета. Этот файл необходим для установки WinUSB в Windows. Дополнительные сведения о создании и тестировании файлов подписанных каталогов см. в пошаговом руководстве по подписи кодаKernel-Mode на сайте Центра разработки для Windows — оборудование.
Подключите USB-устройство к компьютеру.
Откройте диспетчер устройств на компьютере. Следуйте инструкциям мастера обновления драйверов и выберите ручную установку. При появлении запроса укажите расположение папки пакета драйвера для завершения установки.