Обзор разработки приложений Windows для USB-устройств

Сводка:

  • Рекомендации по выбору правильной модели программирования
  • Возможности разработки приложений UWP и классических приложений

Важные API:

В этой статье приведены рекомендации по выбору того, следует ли создавать приложение UWP или классическое приложение windows для взаимодействия с USB-устройством.

Windows предоставляет наборы API, которые можно использовать для написания приложений, которые используются для взаимодействия с пользовательскими USB-устройствами. API выполняет общие задачи, связанные с USB, такие как поиск устройства, передача данных.

Пользовательское устройство в этом контексте означает устройство, для которого корпорация Майкрософт не предоставляет встроенный драйвер класса. Вместо этого можно установить WinUSB (Winusb.sys) в качестве драйвера устройства.

Выбор модели программирования

При установке Winusb.sysниже приведены параметры модели программирования:

Стратегия выбора оптимальной модели программирования зависит от различных факторов.

  • Будет ли ваше приложение взаимодействовать с внутренним USB-устройством?

    API в основном предназначены для доступа к периферийным устройствам. API также может обращаться к внутренним USB-устройствам компьютера. Однако доступ к внутренним USB-устройствам пк из приложения UWP ограничен привилегированным приложением, которое явно объявлено в метаданных устройства изготовителем оборудования для этого компьютера.

  • Будет ли ваше приложение взаимодействовать с изохронными конечными точками USB?

    Если приложение передает данные в изохронные конечные точки устройства или из нее, необходимо написать классическое приложение для Windows. В Windows 8.1 в набор API добавлены новые функции WinUSB, которые позволяют классическому приложению отправлять данные в изохронные конечные точки и получать их из них.

  • Является ли приложение типом приложения "панель управления"?

    Приложения UWP являются приложениями для отдельных пользователей и не имеют возможности вносить изменения за пределами область каждого приложения. Для таких типов приложений необходимо написать классическое приложение для Windows.

  • Поддерживаются ли классы USB-устройств приложениями UWP?

    Напишите приложение UWP, если ваше устройство принадлежит к одному из этих классов устройств.

    • name:cdcControl, classId:02 * *
    • name:physical, classId:05 * *
    • name:personalHealthcare, classId:0f 00 00
    • name:activeSync, classId:ef 01 01
    • name:palmSync, classId:ef 01 02
    • name:deviceFirmwareUpdate, classId:fe 01 01
    • name:irda, classId:fe 02 00
    • name:measurement, classId:fe 03 *
    • name:vendorSpecific, classId:ff * *

    Примечание

    Если устройство принадлежит классу DeviceFirmwareUpdate, приложение должно быть привилегированным.

Если устройство не принадлежит к одному из предыдущих классов устройств, напишите классическое приложение для Windows.

Требования к драйверу

Требования к драйверу Приложение UWP Классическое приложение Windows
Драйвер функции предоставляемые корпорацией МайкрософтWinusb.sys(драйвер в режиме ядра). предоставляемые корпорацией МайкрософтWinusb.sys(драйвер в режиме ядра).
Драйвер фильтра Если драйверы фильтров присутствуют, доступ предоставляется только привилегированным приложениям. Приложение объявляется изготовителем оборудования как привилегированные приложения в метаданных устройства. Драйвер фильтра может присутствовать в стеке устройств в режиме ядра, если он не блокирует доступ к Winusb.sys.

Примеры кода

Пример Приложение UWP Классическое приложение Windows
Начало работы с этими примерами

Средства разработки

Средства разработки Приложение UWP Классическое приложение Windows
Среда разработчика Microsoft Visual Studio 2013

Пакет средств разработки программного обеспечения Microsoft Windows (SDK) для Windows 8.1
Используйте шаблон приложения WinUSB , входящий в состав Visual Studio (Ultimate или Professional) и комплект драйверов Windows (WDK) 8 или более поздней версии.

Для изохронной передачи Visual Studio 2013 с комплектом драйверов Windows (WDK) 8.1 или более поздней версии.
Языки программирования C#, VB.NET, C++, JavaScript C/C++

Реализация компонента

Ключевой сценарий Приложение UWP Классическое приложение Windows
Обнаружение устройства Используйте пространство имен Windows.Devices.Enumeration , чтобы получить usbDevice. Используйте SetupAPI и WinUsb_Initialize , чтобы получить WINUSB_INTERFACE_HANDLE.
Передача элементов управления ПО USB UsbSetupPacket
UsbControlRequestType
UsbDevice.SendControlInTransferAsync
UsbDevice.SendControlOutTransferAsync
WINUSB_SETUP_PACKET
WinUsb_ControlTransfer
Получение дескрипторов USB UsbDevice.DeviceDescriptor
UsbConfiguration.Descriptors
Дескрипторы UsbInterface.
UsbEndpointDescriptor
WinUsb_GetDescriptor
Отправка массовой передачи по USB UsbBulkInPipe
UsbBulkOutPipe
WinUsb_ReadPipe
WinUsb_WritePipe
Отправка передачи прерываний USB UsbInterruptInPipe
UsbInterruptOutPipe
WinUsb_ReadPipe
WinUsb_WritePipe
Отправка изохронной передачи по USB Не поддерживается. WinUsb_ReadIsochPipe
WinUsb_ReadIsochPipeAsap
WinUsb_WriteIsochPipe
WinUsb_WriteIsochPipeAsap
Закрытие устройства UsbDevice.Close WinUsb_Free

Документация

Документация Приложение UWP Классическое приложение Windows
Руководство по программированию Общение с USB-устройствами, начало и завершение Как получить доступ к USB-устройству с помощью функций WinUSB
Справочник по интерфейсам API Windows.Devices.Usb Функции WinUSB