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


Обзор разработки приложений 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 новые функции WinUSB добавлены в набор API, который позволяет классическому приложению отправлять данные и получать данные из изохронных конечных точек.

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

    Приложения 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.Descriptors
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