Поделиться через


Архитектура и модули WinUSB

WinUSB состоит из двух основных компонентов:

  • Winusb.sys — это драйвер режима ядра, который можно установить как драйвер фильтра или функции над драйверами протокола в стеке устройств в режиме ядра USB-устройства.
  • Winusb.dll — это библиотека DLL в пользовательском режиме, которая предоставляет функции WinUSB. Приложения могут использовать эти функции для взаимодействия с Winusb.sys при установке в качестве драйвера функции устройства.

Для устройств, которые не требуют пользовательского драйвера функций, Winusb.sys можно установить в стеке режима ядра устройства в качестве драйвера функции. Затем процессы пользовательского режима могут взаимодействовать с Winusb.sys с помощью набора запросов управления ввода-вывода устройства или вызова функций WinUSB.

На следующем рисунке показан стек USB-драйверов, содержащий несколько экземпляров Winusb.sys.

Схема стека объектов Драйвера WinUSB и устройства, разделенная режимами пользователя и ядра.

На предыдущем рисунке показан пример конфигурации WinUSB, реализующей три класса интерфейса устройства, каждый из которых имеет один зарегистрированный интерфейс устройства:

  • Экземпляр 1 из Winusb.sys регистрирует интерфейс устройства A, который поддерживает драйвер пользовательского режима (Usboem.dll).
  • Экземпляр 2 из Winusb.sys регистрирует интерфейс устройства B, который поддерживает драйвер пользовательского режима для сканера (Usbscan.exe), который взаимодействует с Winusb.dll с помощью системной службы (SVCHOST).
  • Экземпляр 3 из Winusb.sys регистрирует интерфейс устройства C, который поддерживает программу обновления встроенного ПО (Usbfw.exe).

Существует ровно один загруженный экземпляр Winusb.sys. Объект физического устройства (PDO) может представлять некомпозитное устройство (экземпляр 1 на схеме) или может представлять интерфейс или коллекцию интерфейсов на составном устройстве (экземпляры 2 и 3). Для устройств класса беспроводного мобильного коммуникационного устройства USB (WMCDC) PDO может даже представлять несколько коллекций интерфейсов. (Дополнительные сведения о PDOS для устройств WMCDC см. в разделе Поддержка класса беспроводного мобильного коммуникационного устройства.)

Любое приложение в режиме пользователя может взаимодействовать с стеком USB, загрузив библиотеку динамического канала WinUSB (Winusb.dll) и вызвав функции WinUSB, предоставляемые этим модулем.