Обзор разработки приложений Windows для USB-устройств
Сводка:
- Рекомендации по выбору правильной модели программирования
- Возможности разработки приложений UWP и классических приложений
Важные API:
В этой статье приведены рекомендации по выбору того, следует ли создавать приложение UWP или классическое приложение windows для взаимодействия с USB-устройством.
Windows предоставляет наборы API, которые можно использовать для написания приложений, которые используются для взаимодействия с пользовательскими USB-устройствами. API выполняет общие задачи, связанные с USB, такие как поиск устройства, передача данных.
Пользовательское устройство в этом контексте означает устройство, для которого корпорация Майкрософт не предоставляет встроенный драйвер класса. Вместо этого можно установить WinUSB (Winusb.sys) в качестве драйвера устройства.
Выбор модели программирования
При установке Winusb.sysниже приведены параметры модели программирования:
Приложение UWP для USB-устройства
Windows 8.1 предоставляет пространство имен Windows.Devices.Usb, которое нельзя использовать в более ранних версиях Windows. Другие ресурсы Microsoft Store см. в документации по универсальная платформа Windows.
Классическое приложение Windows для USB-устройства
До Windows 8.1 приложения, взаимодействующие через Winusb.sys, были классическими приложениями, написанными с помощью функций WinUSB. В Windows 8.1 набор API был расширен. Дополнительные сведения о разработке приложений для Windows см. в разделе Разработка для Windows.
Стратегия выбора оптимальной модели программирования зависит от различных факторов.
Будет ли ваше приложение взаимодействовать с внутренним 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 |