|
0 / 0 / 0
Регистрация: 05.12.2015
Сообщений: 9
|
||||||
CreateFile для чтения HID клавиатуры?24.12.2015, 18:11. Показов 4273. Ответов 13
Метки createfile (Все метки)
Пытаюсь с помощью библиотеки "setupapi" открыть для чтения устройство HID определяемое системой как HID клавиатура.
По vid и pid благополучно нахожу свое усройство (вернее имя файла) и пытаюсь с помощью CreateFile получить хэндл, для дальнейшего чтения HID функцией из библиотеки "setupapi". Тут начинаются проблемы...
Если вместо GENERIC_READ ставим 0 (получить только атрибуты файла), хэндл - получен. Но что самое странное, если ставлю GENERIC_WRITE, опять получаю хэндл... Как то не понимаю, т.е. на запись можно, а чтение нельзя??? Причем так себя ведет и реальная клава которая подключена у меня ... Что я не догоняю? Вразумите... Win 7 стоит.
0
|
||||||
| 24.12.2015, 18:11 | |
|
Ответы с готовыми решениями:
13
Функции CreateFile и для ReadFileEx для чтения несколькими процессами из текстового файла Чтения результатов ввода со сканера RS-232(com-port) через ReadFile/CreateFile WinAPI Хук для чтения с клавиатуры. Добавление по кодам клавиатуры |
|
Ушел с форума
|
|
| 25.12.2015, 10:27 | |
|
Windows не даст открыть клавиатуру или мышь на чтение, т.к. она уже
открыта в эксклюзивном режиме потоком, который обрабатывает ввод.
1
|
|
|
0 / 0 / 0
Регистрация: 05.12.2015
Сообщений: 9
|
|
| 25.12.2015, 10:39 [ТС] | |
|
Вот-вот, мысль у меня была такая, что хэндл захвачен на чтение, причем стоит возможность на открытие для записи. Но нигде не мог найти информацию по этому поводу.
Тогда вопрос: Вы до сих пор придерживаетесь мнения, что такую задачу легче решить прослойкой в драйверах? Или все таки есть какой-нибудь вариант? С помощью глобального хука я сделал, но мне не нравиться такой подход. т.е. можно ли как-то отловить данные с этого устройства?
0
|
|
|
Ушел с форума
|
|||||
| 25.12.2015, 11:44 | |||||
|
Например: IRP_MJ_CREATE (Kbdclass) https://msdn.microsoft.com/en-... s.85).aspx
1
|
|||||
|
0 / 0 / 0
Регистрация: 05.12.2015
Сообщений: 9
|
|
| 25.12.2015, 12:05 [ТС] | |
|
"..."Такую задачу" - это какую?..", это я с Вами заочный разговор продолжил))) Читал тут пару дней Ваш ответ, кто то спрашивал про сканер ШК, определяемый как HID клавиатура. Дословно не помню, но по моему Вы ответили, что прокладка-драйвер для такого дела займет 700-800 строк.
Ну у меня задача один в один. Надо отловить данные от определенной HID клавиатуры. С помощью хука я конечно отловил, но там шаманство не гарантирующее 100%. Т.к. определение идет по комбинации символов (префикса), нет гарантии, что случайно пользователь не введет такую комбинацию. Тогда начнется цирк. С помощью raw input, хотел было, но почитал и смутило необходимость наличия окна (пусть даже и скрытого), но я не совсем понимаю как это окно держать в фокусе, если надо предоставить нормальную работу пользователям. Подумываю вроде о руткит... Но как бы не владею этой темой, я бы изучил, но скорее всего там куча своих проблем. Если бы кто сказал, что да это позволит решить твой вопрос, я бы пошел... Ну и последний это написать драйвер-прокладку, но помимо того, что надо освоить это в принципе. что совсем непросто. Так еще вы же и "пугаете")), что теперь без подписи свои драйверы можно засовывать в ... Как быть-то, что то я на распутье.
0
|
|
|
Ушел с форума
|
||||
| 25.12.2015, 12:58 | ||||
Сообщение было отмечено AndrewGuz как решение
РешениеВ скрытом окне, которое создано только для обработки сообщений, нет никакого "криминала", система сама так делает для многих вещей. Есть даже специальный тип окна - message only. Вопрос лишь в том, нет ли более простого решения.
1
|
||||
|
0 / 0 / 0
Регистрация: 05.12.2015
Сообщений: 9
|
|
| 25.12.2015, 13:12 [ТС] | |
|
За это время почитал про raw input подробнее в первоисточнике msdn. Действительно, обрывки в постах создали у меня не совсем верное представление. Из документации я понял, что окно "message only" регистрируем для сообщений от девайсов использую дескриптор. Ну дальше обрабатываем и т.д. Т.е. в принципе выглядит прямо "как доктор прописал". Но вот не совсем понятен один момент. Этот дескриптор будет меняться, если устройство переткнут в другой порт USB? Т.е. надо ли будет постоянно проводить настройку?Но это уже вопросы по ходу дела.
Олег, Вам огромное спасибо!!! Потрачу выходные на новую идею)) ЗЫ: И всетаки, никак из головы не выходит, вот есть снифер USB Lyser, он с полтычка выдаст всю инфу по HID клаве(которую можно получить только в атрибутах CreateFile) и считывают все скан коды с этой клавиатуры. Ну не драйвер же они мне суют... Что они курят????
0
|
|
|
Ушел с форума
|
|||
| 25.12.2015, 14:32 | |||
|
А как еще можно прослушивать USB-трафик на низком уровне? Там по-любому либо libusb, либо WinUSB, либо что-то еще.
1
|
|||
|
0 / 0 / 0
Регистрация: 05.12.2015
Сообщений: 9
|
|
| 28.12.2015, 05:24 [ТС] | |
|
Решил я продолжить/закончить эту тему в одном месте. Т.к. сам с толкнулся с трудностями в поиске инфы по вопросу снятия данных с HID клавиатуры (ну или устряства, которое так определяется ОС). Разобрался я с Raw Input - технология очень неплохая... Все четко:
1. Возможность подписаться на сообщения в режиме "RIDEV_INPUTSINK", когда окно будет получать сообщения, даже если оно не активно. Что позволяет использовать "скрытое окно". Это гут... 2. Возможность подписаться на определенный вид/тип девайса. Ну допустим только на HID клаву. За это этветственна струтура "RAWINPUTDEVICE". Но нет возможности подписаться на конретное устройство из семейства. Но это уже детали. В дальнейшем можно фильтровать вплоть до pid и vid HID девайса. Это очень и очень зер гут... 3. Я перекопал всю MSDN, все что смог обГуглил, но технологии, или хотябы зацепки о том, как "не пустить" дальше данные не нашел... В принципе, немного поразмышляв становится понятно(с моего уровня познаний, может я и ошибаюсь), что это в принципе невозможно. Если в глобальном хуке идет цепочкаПОСЛЕДОВАТЕЛЬНЫХ вызовов и там ее(цепочку) можно прервать, то в данном случае это просто информирование заинтересованных подписчиков. И это очень и очень не гут... Если бы проблема стояла только в надежном фильтре, по устройству, поступающих данных. Всё, проблема решена, но если необходимо еще и "убрать" их из общего потока - то... Вот у меня, если очень схематично, задача стоит определить данные с нужного устройства, изъять их и направить в виртуальный COM порт, вернее не "В", а "Из". Т.е. в итоге что я имею. HOOK глобальный - работает, но нет 100% гарантии. Все зависит от того, как сплясал с бубном... Raw Input - прекрасно.. Но данные продолжают "гулять" по пользовательскому уровню и куда они прилетят, вопрос.. Остается один путь, вниз к "морлокам"... Но там свои проблемы. Неужели нет выхода???
0
|
|
|
Ушел с форума
|
|
| 28.12.2015, 10:45 | |
|
Вниз к морлокам - это и есть выход.
Не по теме: Кстати, забавная аналогия, раньше не встречал.
1
|
|
|
0 / 0 / 0
Регистрация: 05.12.2015
Сообщений: 9
|
|
| 28.12.2015, 10:59 [ТС] | |
|
Ну да, ну да, насколько я понимаю это только еще вход. Вот не факт, что я еще и выход найду.))
А не могли бы Вы, с высоты своего опыта, подсказать. Для моей задачи с чего начать? Что бы по всему полю не рыть.
0
|
|
|
Ушел с форума
|
|
| 28.12.2015, 11:08 | |
|
Возможно два варианта:
1) написать классический фильтрующий драйвер клавиатуры. Кода там немного совсем, пять стандартных обработчиков плюс функция-перехватчик нажатий клавиш. Перехваченный ввод можно полностью контролировать, вплоть до модификации или блокировки. 2) Поставить хук на обработчик IRP_MJ_READ драйвера kbdclass.sys. В принципе, этот вариант еще более мощный, т.к. не нужно, например, перестраивать стек устройств при установке своего драйвера. Но здесь нужно уметь работать с некоторыми недокументированными структурами и функциями Windows, так что вариант для продвинутых. Я на wasm.ru (профиль okman) несколько раз описывал в общих чертах написание таких фильтров и принципы их работы, ссылку ввиду правил форума дать не могу. -------------------------- Правда, если ты драйверы до этого никогда не писал, то затея эта гиблая. ![]() Как ни печально признавать, но все, кто берется за разработку драйверов, обычно заваливают первые проекты с треском (точнее, с грохотом). Потому что тема серьезная, даже для мелкого драйвера, с наскока не поднять.
1
|
|
|
0 / 0 / 0
Регистрация: 05.12.2015
Сообщений: 9
|
|
| 28.12.2015, 11:22 [ТС] | |
|
Спасибо, понял... Ну я по Вашей "наводке", попробую нагрузить мозг на праздники, а там видно будет. Если пойму, что смогу, пойду дальше.
Всех с Новым Годом! Удачи!!!
0
|
|
|
Ушел с форума
|
|
| 28.12.2015, 11:24 | |
|
1
|
|
| 28.12.2015, 11:24 | |
|
Помогаю со студенческими работами здесь
14
STM32. HID профиль мыши и клавиатуры Чтение из HID - клавиатуры (сканера штрих-кодов) Эмуляция нажатия кнопки HID устройства (мыши или клавиатуры)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|