WinUSB

WinUSB (winusb.sys) — проприетарный USB-драйвер, поставляемый корпорацией Microsoft в составе своих операционных систем семейства Windows, начиная с Windows XP. Позволяет разработчикам Windows-совместимых USB-устройств облегчить разработку за счет отказа от создания, сертификации и распространения собственных драйверов устройств.

Предназначен для устройств, доступ к которым осуществляется только одним программным приложением в любой момент времени (что подходит для большинства устройств) и позволяет приложению получать прямой доступ к устройству через простую программную DLL-библиотеку (winusb.dll). Библиотека обеспечивает конфигурирование USB-интерфейса устройства и обмен данными с ним на уровне конечных точек.

Техническая реализация

править

При подключении USB устройства оно сообщает хосту свои дескрипторы. Чтобы устройство определилось как совместимое с WinUSB, в нем должен существовать строковый дескриптор с индексом 0xEE, содержащий строку «MSFT100». После этого WinUSB запрашивает свои дескрипторы вендора.

Достоинства и недостатки

править

Достоинства

править
  • Не требуется знать, как писать драйверы.
  • Упрощается и ускоряется разработка.

Недостатки

править
  • Только одно приложение имеет доступ к устройству в любой момент.
  • Поддержка изохронной передачи появилась начиная с Windows 8.1.
  • Некоторые ограничения в конфигурировании USB-интерфейса устройства.

Другие решения

править

Одним из решений является использование стандартизированных классов USB-устройств. Операционные системы содержат встроенные драйверы для некоторых из них. Например, HID-класс или CDC-класс (англ.). CDC-устройство может выступать как виртуальный последовательный порт для использования нового устройства с устаревшими приложениями или для простоты создания новых приложений и устройств теми, кто не знаком с USB на уровне программирования.

Если предыдущий вариант решения не подходит, каждый может попробовать написать специализированный драйвер. Для новых версий Microsoft Windows это можно сделать при помощи Windows Driver Foundation.

Вместо WinUSB можно использовать библиотеку с открытым исходным кодом libusb-win32. Эта библиотека так же, как WinUSB, упрощает работу с USB-устройствами и может применяться в операционных системах Linux, Windows и Mac OS.

Ссылки

править