|
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
|
||||||
Фильтрующий драйвер клавиатуры07.08.2016, 21:46. Показов 9412. Ответов 30
Метки нет (Все метки)
Пытаюсь написать фильтрующий драйвер по известной книжке (код внизу). Хочу перехватывать IMJ_IRP_READ с клавиатуры и выводить в дебагерское окно скан-коды нажатых клавиш. Для контроля, установился ли драйвер и куда он установился использую Device Tree v2.30. Пытаюсь встать поверх KeyboardClass0. Драйвер устанавливается, но почему то не туда. Как я понимаю в Device Tree он должен отражаться как Attached к драйверу клавиатуры, а он отражается там просто как отдельный драйвер, хоть и с типом FILE_DEVICE_KEYBOARD. Ну и естественно, нажатия клавиш не перехватываются.
Функция включения драйвера в цепочку - InjectDriver. Вот тут WCHAR targetNameBuff[24] = L"\\Device\\KeyboardClass0" изначально было CCHAR, но компилятор ругался и выдавал ошибку двухбайтовой строки. Пришлось заменить на WCHAR. При сборке, правда, вот здесь RtlInitAnsiString (&ntNameString, targetNameBuff); выдавал предупреждение о конфликте типов WCHAR и PCSZ. Если передавать во так RtlInitAnsiString (&ntNameString, (PCSZ)targetNameBuff) - то предупреждений нет, но и толку нет. Может я действительно неправильно передаю название объекта устройства? Еще есть предположение о неправильной установке флагов. В книге написано, что флаги должны быть установлены точь-в-точь, как и в нижнем устройстве. По Device Tree у KeyboardClass0 установлены флаги BUFFERED_IO, DEVICE_HAS_NAME,DRVO_LEGACY_RESOURSES,DO _POWER_PAGABLE. В InjectDriver я установил только BUFFERED_IO, DO_POWER_PAGABLE и DRVO_LEGACY_DRIVER. А вот этих флагов DEVICE_HAS_NAME,DRVO_LEGACY_RESOURSES компилятор вообще не видит, поэтому я установил хотя бы DRVO_LEGACY_DRIVER - очень похоже, что это одно и тоже. Но DEVICE_HAS_NAME все равно не установлен - может из-за этого ошибка? IoCreateDevice и IoAttachDevice ошибок не выдают. Служба запускается, драйвер устанавливается. Система 64-бит 10-я винда. Пишу в VS2015.
0
|
||||||
| 07.08.2016, 21:46 | |
|
Ответы с готовыми решениями:
30
Драйвер ММ-клавиатуры |
|
Ушел с форума
|
|||
| 30.08.2016, 08:12 | |||
|
Но можно, если хочешь, ручками повторить всю последовательность установки, которую выполняет система, только это будет долго и нудно. предупреждением вылазит только на XP и Server 2003, а на Vista и выше все тихо.
0
|
|||
|
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
|
||||||
| 31.08.2016, 20:53 [ТС] | ||||||
|
Убежденный, вот переписал код с учетом переваренного:
Все никак не пойму, надо ли еще что-то добавлять? Нужно ли регистрировать интерфейс устройства? В Уолтера нет указания, что это обязательно. Только если драйвер будет с приложениями общаться через IOCTL, мне тут такого вроде бы не надо. По порядку регистрации драйвера. 1. Пишем INF по типу такого: [INF] [Version] Signature=NatiF [Defaultlnstall] CopyFiles=CopyClassFilters AddReg=FilterAddReg [Defaultlnstall.Services] AddService^MyDriver,.FilterAddService [SourceDisksFiles] MyDriver.sys-l [SourceDisksNames] T="Filter install disk" [DestinationDirs] DefaultDestDir-12 [CopyClassFiIters] MyDriver.sys,,tZ [FilterAddService] ServiceType-1 ErrorContrcfWl StartType=3 ServiceBinary=%12%\ MyDriver. sys [FilterAddReg] HKLM,*CLASSKEY*,UpperFi1ters,REG_EXPAND_ SZ,MyDriver [Strings] CLASSKEY-HKLM\SYSTEM\CurrentControlSet\Control\Cl ass\{4d36e96b-e325-11ce-bfc1-08002be10318} [/INF] 2. Пишем инсталятор, где вызываем InstallHinfSection с полным адресом INF-файла. Он запускает INF, который регистрирует драйвер. После чего происходит перестройка стека драйверов и драйвер начинает работать. Правильно?
0
|
||||||
|
Ушел с форума
|
|||
| 01.09.2016, 09:14 | |||
|
Интерфейс устройства регистрируют драйверы ниже по стеку. Я уже не помню деталей, т.к. устанавливаю такие драйверы обычно через WiX Toolset (элемент называется Difxapp:Driver).
0
|
|||
|
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
|
|
| 01.09.2016, 16:49 [ТС] | |
|
0
|
|
|
Ушел с форума
|
|
| 01.09.2016, 17:24 | |
|
Да.
Для PnP-драйверов, в том числе и таких фильтров, как верхний фильтрующий драйвер класса клавиатуры, INF-файл - это единственный легальный и документированный способ установки.
1
|
|
|
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 585
|
|
| 08.09.2016, 16:11 | |
|
0
|
|
|
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
|
||
| 08.09.2016, 16:17 [ТС] | ||
|
"Использование microsoft windows driver model" (Уолтер Они) - это куда более фундаментальная книжка, по ней более правильно учиться.
1
|
||
|
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
|
|
| 13.09.2016, 15:49 [ТС] | |
|
Убежденный, а где лучше посмотреть как пишется inf-файл для драйвера?
0
|
|
|
Ушел с форума
|
|
| 13.09.2016, 15:56 | |
|
В сэмплах WDK.
0
|
|
|
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
|
|
| 13.09.2016, 19:08 [ТС] | |
|
Убежденный, поковырялся в MSDN, вот что написал в INF, исходя из вышеизложенного:
[Version] Signature = "$WINDOWS NT$" Class = "Keyboard" ClassGuid = {4d36e96b-e325-11ce-bfc1-08002be10318} Provider = %Apple% DriverVer = 06/07/20016,1.0.0.1 [DestinationDirs] DefaultDestDir = 12 [SourceDisksNames] 1 = %InstDisk% [SourceDiskFiles] KbdFilterDRV.sys = 1 [DefaultInstall] CopyFiles = KbdFilterDRV.sys [DefaultInstall.Services] AddService=%DRVServiceName%,,DRV.Service [DRV.Service] DisplayName = %DRVServiceName% Description = %DRVdesctiprion% ServiceBinary = %12%\KbdFilterDRV.sys ServiceType = 1 StartType = 3 ErrorControl = 1 AddReg = DRV.AddRegistry [DRV.AddRegistry] HKLM,%CLASSKEY%,UpperFilters,0x00020000, 1 [Strings] CLASSKEY = "SYSTEM\CurrentControlSet\Control\Class\ {4d36e96b-e325-11ce-bfc1-08002be10318}" Apple = "Apples" InstDisk = "Source disk" DRVServiceName = "KBD Filter serivce" Description = "Test" Похоже на правду или чего-то не хватает? Добавлено через 43 минуты [SourceDisksNames] там вот определяется диск через 1. Это текущий диск или какой-то другой? В CopyFiles указываем ведь только файл в данном случае? Cat не указываем, ибо драйвер без подписи. CLASSKEY = "SYSTEM\CurrentControlSet\Control\Class\ {4d36e96b-e325-11ce-bfc1-08002be10318}" - тут не пишем HLKM, ибо он уже есть в AddRegistry? В AddRegistry порядок параметров правильный HKLM,%CLASSKEY%,UpperFilters,0x00020000, 1? Тут под 1 подразумевается имя файла, которое выше было определено, так можно делать?
0
|
|
|
Ушел с форума
|
|||
| 13.09.2016, 20:02 | |||
![]() Overview of INF Files https://msdn.microsoft.com/en-... -inf-files
0
|
|||
| 13.09.2016, 20:02 | |
|
Макрос, фильтрующий по дате Драйвер стандартной клавиатуры Драйвер клавиатуры и мыши. Помогите написать драйвер клавиатуры! Драйвер для миди клавиатуры Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|