Необработанный PDO для отправки IOCTL в верхний драйвер фильтра (kbfiltr/moufiltr) для позволения/запрещения устройства

Если поджигателю включат, то window.console не будет не определен. console.firebug возвратит номер версии.

19
задан Dale 24 September 2009 в 08:57
поделиться

2 ответа

Хорошо, я наконец решил эту проблему, и мой драйвер работает.

Реализация драйвера фильтра KMDF :

Спасибо Сергиусу, который предложил подход через COM-порт, потому что это помогло мне настроить WinDbg. В этом замечательном сообщении в блоге объясняется, как его быстро настроить, в основном вы позволяете VPC настраивать COM-порт как именованный канал, включать режим отладки ядра в виртуализированной ОС и подключаться к нему, пока это загрузка. Затем вы можете получать все сообщения DbgPrint при загрузке драйвера и делать гораздо больше, но только сообщения трассировки во время процесса запуска мне очень помогли.

Я думаю, что моя основная проблема заключалась в попытке повторно использовать внутренний IOCTL в KbFiltr. С моей стороны это была просто плохая дизайнерская идея, потому что я не понимал разницы между внутренним IOCTL и другими IOCTL - внутренние IOCTLS, такие как IOCTL_INTERNAL_KEYBOARD_DISCONNECT, имеют ограниченные условия доступа и должны отправляться только другими драйверами или ядром. Также эта статья базы знаний «Как отправить IOCTL в драйвер фильтра» представляет собой пример использования той же структуры управляющего устройства, но это WDM.

В любом случае, после борьбы с примером KbFiltr все выходные, я наконец сдался и начал заново, используя пример тостера / фильтра WDF . Это более простой драйвер фильтра KMDF, и мне пришлось заполнить множество пробелов с помощью KbFiltr и MouFiltr. Работа драйвера фильтра тостера аналогична KbFiltr, но вместо PDO создается управляющее устройство. Он также устанавливает имя устройства dos для устройства управления, чтобы вы могли общаться с ним из пользовательского режима без необходимости использовать Pinvoke для выполнения этого шага. Устройство управления позволяет вам управлять всеми устройствами, на которых загружен ваш драйвер фильтра, просто путем итерации по коллекции. Блокировка ожидания используется для синхронизации доступа к коллекции.

Я также смог просто изменить файл INF (чтобы использовать класс Mouse вместо класса Toaster) и применить его прямо из коробки на моей тестовой машине без каких-либо изменений в коде драйвера! Это так много легче начать с того, что работает.

16
ответ дан 30 November 2019 в 04:54
поделиться

Прежде всего: вы можете делать то, что хотите (отключать тачпад на моем ноутбуке, когда к нему подключена мышь) в пользовательском режиме. Так будет намного проще и безопаснее. Посмотрите на Использование функций установки устройства и WM_DEVICECHANGE

. Чтобы отладить проблемы в вашем коде: Получите дамп памяти из BSOD или настройте соединение отладчика ядра (используя COM-порт на вашем виртуальном ПК, перенаправленный к трубе). См. Инструменты отладки для Windows

Удачи!

3
ответ дан 30 November 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: