Creating a virtual HID device
I’d like to create a virtual HID device (emulate it with a driver).
It must be visible to clients that implement standard HID detection:
- Call HidD_GetHidGuid() – Get the HID device class GUID
- Call SetupDiGetClassDevs() – Get a handle to a set of devices which implement the HID interface
- Call SetupDiEnumDeviceInterfaces() – For each device in the returned set of devices, obtain the interface information for all exposed HID interfaces.
- Call SetupDiGetDeviceInterfaceDetail() – For each interface obtained in the previous call, get the detailed information block for that interface. This detailed information includes the string that can be passed to CreateFile() to open a handle to the device
- Call SetupDiDestroyDeviceInfoList() – Free up the device information set that was obtained in the call to SetupDiGetClassDevs().
The device should also support reading, so CreateFile / ReadFile would return data supplied by me from the driver.
I don’t really know where to begin, as I don’t have a lot of exp. in kernel dev. 🙁
Добро пожаловать в службу поддержки Logitech
Гарантийная замена обычно осуществляются по месту покупки. В текущих обстоятельствах компания Logitech не может осуществить замену по гарантии, мы рекомендуем Вам обратиться за гарантийной помощью по месту покупки. Мы не допустим истечения срока действия гарантии в этот период кризиса и выполним действующие гарантии как можно скорее. Наши телефонные линии, обслуживающие Россию, в настоящее время недоступны по техническим причинам. Вы можете связаться с нами через наш круглосуточный онлайн-чат или написать нам по электронной почте.
- Зарегистрироваться
- Начало работы
- Вопросы и ответы
- Сообщество
- Файлы для загрузки
- Гарантия
- Технические характеристики
- Запасные части
- Галерея
- Связаться с нами
Обновите драйвер для HID-устройства при помощи диспетчера устройств
Для данного продукта пока нет загружаемых файлов
Для данного продукта пока нет вопросов и ответов
По данному продукту нет документов.
На данный товар нет запчастей
Для данного товара нет изображений
- Откройте диспетчер устройств.
- Windows 7, Windows 8, Windows 8.1: Панель управления > Система > Диспетчер устройств
- Windows 10: на панели задач щелкните правой кнопкой мыши флажок Windows и выберите Диспетчер устройств
- В меню Диспетчер устройств выполните поиск вашего устройства. При использовании мыши или клавиатуры перейдите в меню Мышь или Клавиатура и разверните его. При использовании джойстика или любого другого устройства разверните меню HID-устройство.
- Отобразится имя устройства (например, MX Master 2s, Craft) или устройства, совместимого с HID-устройством. (Мышь будет совместима с HID-устройством, а клавиатура отобразится в качестве HID-клавиатуры.) Если устройство отображается в качестве совместимого с HID-устройством или рядом с ним стоит желтый восклицательный знак, обновите драйверы для набора микросхем USB.
Ознакомиться с гарантией Logitech можно здесь
Используйте гарантию наилучшим образом
Вопросы и ответы
Onboard Memory Manager is out of date. Please update to the most recent release.
Virtual hid device что это
I’d like to create a virtual HID device (emulate it with a driver).
It must be visible to clients that implement standard HID detection:
- Call HidD_GetHidGuid() – Get the HID device class GUID
- Call SetupDiGetClassDevs() – Get a handle to a set of devices which implement the HID interface
- Call SetupDiEnumDeviceInterfaces() – For each device in the returned set of devices, obtain the interface information for all exposed HID interfaces.
- Call SetupDiGetDeviceInterfaceDetail() – For each interface obtained in the previous call, get the detailed information block for that interface. This detailed information includes the string that can be passed to CreateFile() to open a handle to the device
- Call SetupDiDestroyDeviceInfoList() – Free up the device information set that was obtained in the call to SetupDiGetClassDevs().
The device should also support reading, so CreateFile / ReadFile would return data supplied by me from the driver.
I don’t really know where to begin, as I don’t have a lot of exp. in kernel dev. 🙁
1. Краткое описание
Класс USB HID — это стандартный класс USB-устройств, который включает в себя множество устройств. Устройство HID определяет его как устройство для взаимодействия человека с компьютером, используемое для управления некоторыми аспектами работы компьютера, такими как USB-мышь, USB-клавиатура, игровой USB-джойстик и т. Д. Однако оборудование HID не обязательно требует интерфейса человек-машина, если оборудование, соответствующее спецификации категории HID, является оборудованием HID.
Одним из преимуществ устройств USB HID является то, что операционная система поставляется с драйверами HID, и пользователям не нужно разрабатывать драйверы, если они используют системные вызовы API для завершения взаимодействия.
Он содержит две наиболее важные инструкции:
1. 《Device Class Definition for human interface device (HID)》
2. 《Universal Serial Bus HID Usage Tables》
Документ 1 описывает базовый состав и формат HID, а документ 2 является дополнением к документу 1, в котором перечислены основные компоненты различных устройств HID.
2. Протокол HID
Основываясь на введении базового протокола USB в предыдущей главе, в этой главе основное внимание уделяется классам взаимодействия человека и компьютера HID. (Базовый протокол USB-связи доступен по умолчанию)
2.1 Канал связи USB HID устройства
Все устройства HID связываются с хостом через канал управления USB (канал по умолчанию, конечная точка 0) и канал прерывания (конечная точка 1 или конечная точка 2).
Описание запроса конвейера
Элемент управления (конечная точка 0) должен передавать дескриптор USB, код запроса класса и данные сообщения для запроса
Вход прерывания должен передавать входные данные с устройства на хост
Выход прерывания Дополнительно Передача выходных данных с хоста на устройство
Примечание. USB-хост — это ПК и USB-устройства, такие как мышь. В описании конечной точки прерывания указан временной интервал опроса хоста. То есть хост будет «запрашивать» данные через определенные промежутки времени.
Конвейер управления в основном используется в следующих трех аспектах
- Получение / ответ на запрос управления USB-хостом и связанные данные
- Передавать данные, когда USB-хост запрашивает (например, отвечает на запрос Get_Report и т. Д.)
- Получать данные с USB-хоста
Конвейер прерывания в основном используется в следующих двух аспектах
- USB-хост получает данные асинхронной передачи от USB-устройства
- USB-хост отправляет данные в реальном времени на USB-устройство.
Передача выходных данных прерывания от USB-хоста к USB-устройству является необязательной.Когда выходные данные прерывания не поддерживаются, USB-хост передает данные на USB-устройство через канал управления.
2.2 Дескрипторы, относящиеся к USB HID устройствам
В дополнение к пяти стандартным дескрипторам USB (дескриптор устройства, дескриптор конфигурации, дескриптор интерфейса, дескриптор конечной точки, строковый дескриптор), дескрипторы устройства HID также включают три дескриптора, зависящих от класса устройства HID: Дескриптор HID, дескриптор отчета (Отчет), дескриптор объекта (Физический) 。
Иерархическая взаимосвязь между ними показана на рисунке:
Можно видеть, что на уровне Interface desc указано HID desc.
В дополнение к трем конкретным дескрипторам HID, которые составляют интерпретацию устройств HID, к устройствам HID относятся пять стандартных дескрипторов:
- Дескриптор устройства : bDeviceClass, bDeviceSubClass, bDeviceProtocolТри значения должны быть 0
- Дескриптор интерфейса : bInterfaceClass Значение должно быть 0x03,bInterfaceSubClass Имеет значение 0 или 1 , 1 указывает, что HID-устройство является загрузочным устройством (BootDevice, обычно значимым для ПК, что означает, что BIOS может распознать HID-устройство, которое вы используете при загрузке, и только стандартную мышь или клавиатуру можно назвать BootDevice), 0 указывает устройство HID. Операционная система может распознавать используемое устройство только при загрузке. bInterfaceProtocol Смысл значения следующий:
0 — No Sub Class
1 — Boot Interface SubClass
2.2.1 Дескриптор HID
Дескриптор HID связан с дескриптором интерфейса, поэтому, если устройство имеет только один дескриптор интерфейса, независимо от того, сколько дескрипторов конечных точек оно имеет, устройство HID имеет только один дескриптор HID. Дескриптор устройства HID в основном описывает номер версии спецификации HID, дополнительные дескрипторы, используемые при обмене данными HID, и длину дескриптора отчета. В следующей таблице показана структура дескриптора HID.
| Смещение | площадь | Размер (байт) | ценность | описание |
| 0 | bLength | 1 | цифровой | Длина этого дескриптора в байтах |
| 1 | bDescriptorType | 1 | постоянный | Тип дескриптора (здесь 0x21 Категория HID) |
| 2 | bcdHID | 2 | цифровой | Номер версии спецификации HID (код BCD) с использованием 4-х шестнадцатеричных кодов формата BCD |
| 4 | bCountryCode | 1 | цифровой | Идентификационный код страны назначения оборудования |
| 5 | bNumDescriptors | 1 | цифровой | Количество поддерживаемых вспомогательных дескрипторов |
| 6 | bDescriptorType | 1 | постоянный | Типы дескрипторов, связанных с HID, см. В таблице ниже |
| 7 | wDescriptorLength | 2 | цифровой | Сообщите общую длину дескриптора |
| 9 | bDescriptorType | 1 | постоянный | Константа, используемая для определения типа дескриптора, используйте устройство с более чем одним дескриптором |
| 10 | wDescriptorLength | 2 | цифровой | Общая длина дескриптора, используемого в устройствах с более чем одним дескриптором. |
| Значение типа дескриптора |
|---|






