Обзор разработки приложений 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 новые функции 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 |