Классическое приложение Windows для USB-устройства
В этой статье вы узнаете, как приложение может вызывать функции WinUSB для взаимодействия с USB-устройством. Для такого приложения в качестве драйвера функции устройства необходимо установить WinUSB (Winusb.sys). WinUSB в стеке устройства в режиме ядра. Этот драйвер включен в Windows в папку \Windows\System32\drivers.
Если вы используете Winusb.sys в качестве драйвера функций USB-устройства, вы можете вызывать функции WinUSB из приложения для взаимодействия с устройством. Эти функции, предоставляемые Winusb.dll DLL в пользовательском режиме, упрощают процесс обмена данными. Вместо создания запросов управления вводом-выводом устройства для выполнения стандартных операций USB (таких как настройка устройства, отправка управляющих запросов и передача данных на устройство или с него), приложения вызывают эквивалентную функцию WinUSB.
Winusb.dll использует предоставленные приложением данные для создания соответствующего запроса на управление вводом-выводом устройства, а затем отправляет запрос в Winusb.sys для обработки. Для взаимодействия с USB-стеком функция WinUSB вызывает функцию DeviceIoControl с соответствующим IOCTL, который соответствует запросу приложения. После завершения запроса функция WinUSB передает все сведения, возвращенные Winusb.sys (например, данные из запроса на чтение), в вызывающий процесс. Если вызов DeviceIoControl выполнен успешно, он возвращает ненулевое значение. Если вызов завершается сбоем или находится в состоянии ожидания (не обрабатывается немедленно), DeviceIoControl возвращает нулевое значение. При возникновении ошибки приложение может вызвать GetLastError для получения более подробного сообщения об ошибке.
Проще использовать функции WinUSB для взаимодействия с устройством, чем для реализации драйвера. Однако обратите внимание на следующие ограничения.
Функции WinUSB позволяют одному приложению за раз взаимодействовать с устройством. Если требуется несколько приложений для одновременного взаимодействия с устройством, необходимо реализовать драйвер функции.
До Windows 8.1 функции WinUSB не поддерживают потоковую передачу данных в изохронные конечные точки или из нее.
Функции WinUSB не поддерживают устройства, которые уже поддерживают режим ядра. Примерами таких устройств являются модемы и сетевые адаптеры, которые поддерживаются API телефонии (TAPI) и NDIS соответственно.
Для многофункциональных устройств можно использовать INF-файл устройства, чтобы указать встроенный драйвер режима ядра или Winusb.sys для каждой функции USB отдельно. Однако можно указать только один из этих параметров для конкретной функции, а не оба.
Примечание
Для функций WinUSB требуется Windows XP или более поздней версии. Эти функции можно использовать в приложении C/C++ для взаимодействия с USB-устройством. Сведения о создании приложения UWP, использующего API-интерфейсы WinUSB, см. в статье Приложение UWP для USB-устройства.
Начало работы
Получение средств, необходимых для создания классического приложения Windows для устройств
- Следуйте инструкциям в разделе Скачивание комплекта драйверов Для Windows.
Получите тестовое USB-устройство и спецификацию его оборудования.
Используйте спецификацию для определения функциональных возможностей приложения и связанных проектных решений.
Устройства Microsoft USB Test Tool (MUTT) доступны в JJG Technologies. Для этого устройства требуется встроенное ПО корпорации Майкрософт, доступное в разделе Скачать пакет программного обеспечения MUTT.
Напишите скелетное приложение, которое получает дескриптор для устройства.
Существует два подхода к написанию первого приложения:
Запись на основе шаблона WinUSB, включенного в Visual Studio. Дополнительные сведения см. в статье Создание классического приложения для Windows на основе шаблона WinUSB.
Вызовите подпрограммы SetupAPI , чтобы получить дескриптор устройства и открыть его, вызвав WinUsb_Initialize. Дополнительные сведения см. в разделе Как получить доступ к USB-устройству с помощью функций WinUSB.
Установите Winusb.sys для устройства.
При использовании Visual Studio установите пакет драйверов на целевом компьютере с помощью развертывания Visual Studio. Инструкции см. в статье Создание классического приложения для Windows на основе шаблона WinUSB. В противном случае вручную установите драйвер в диспетчер устройств, написав пользовательский INF-файл. Дополнительные сведения см. в статье Установка WinUSB (Winusb.sys).
Получите сведения об устройстве и просмотрите его дескрипторы.
Основные сведения см. в разделе Основные понятия для всех разработчиков USB. Получите сведения о возможностях устройства, считывая дескриптор конфигурации, дескрипторы интерфейса для каждого поддерживаемого альтернативного параметра и их дескрипторы конечных точек. Дополнительные сведения см. в разделе Запрос устройства для дескрипторов USB.
Отправка передачи элементов управления ЧЕРЕЗ USB.
Отправляйте стандартные управляющие запросы и команды поставщика на устройство. Дополнительные сведения см. в разделе Отправка передачи элементов управления в конечную точку по умолчанию.
Отправка массовых или прерываний передач.
Выполняйте операции чтения и записи в массовые конечные точки, прерывания и из нее, поддерживаемые вашим устройством. Дополнительные сведения см. в разделе Выдача запросов ввода-вывода.
Отправка изохронных передач.
Отправлять изохронные запросы на чтение и запись, которые в основном используются для потоковой передачи данных. Эта функция доступна только в Windows 8.1 и более поздних версиях. Дополнительные сведения см. в статье Отправка изохронных передач по USB из классического приложения WinUSB.
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по