Надежный метод определения, когда устройство USB HID эмулирует клавиатуру - PullRequest
1 голос
/ 05 января 2012

Я работаю над встроенной системой, и мне нужно определить, подключил ли пользователь устройство HID, эмулирующее клавиатуру (то есть сканер штрих-кода) или фактическую клавиатуру.

Я могу проверить строковые дескрипторы iManufacturer, iProduct, iSerialNumber и iInterface, чтобы получить некоторые подсказки.Например, считывалось, что «считыватель» или «сканер» появляются в строке iProduct, когда считыватель штрих-кода был подключен.Аналогично, «эмуляция» была замечена в строке iInterface.Тем не менее, я немного неохотно полагаюсь исключительно на эти строки (регистр строк достаточно прост в обращении, но обработка таких вещей, как сокращения в ключевых словах / фразах, быстро становится обременительной.)1.10 и 1.11 спецификации и обнаружили, что дескриптор отчета также предлагает некоторые подсказки.Например, элемент общего использования должен быть что-то вроде 0x0501 для универсального рабочего стола, а элемент локального использования должен быть 0x0906 (клавиатура).Есть ли в дескрипторе отчета что-либо еще, что могло бы помочь обнаружить разницу?

Я бы хотел не использовать списки идентификаторов поставщиков и идентификаторов продуктов, поскольку это встроенная система с ограниченными ресурсами.Предложения?Я что-то пропустил?

1 Ответ

5 голосов
/ 06 января 2012

Не существует абсолютно надежного способа сделать это.Этого не может быть, потому что не существует абсолютного определения того, что является или не является клавиатурой, равно как и разницы между «эмуляцией клавиатуры» и «тем, что является клавиатурой».Граница становится особенно размытой в отношении вспомогательных устройств и таких вещей, как клавиатура для записи, но даже в этом случае у вас есть фундаментальная проблема, заключающаяся в том, что способ эмулировать клавиатуру состоит в том, чтобы общаться через кабель USB точно так же, как клавиатура.

Методы, которые вы предложили, представляют собой разумную эвристику для определения ряда вещей, которые явно не относятся к клавишам (с незначительным риском ложных срабатываний в некоторых случаях), но эвристика, которая ищет подсказки, является лучшим решением, которое будетбудет возможно.

...