Связь между драйвером и пользовательским режимом - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь написать инструмент для мониторинга процессов. Всякий раз, когда создается процесс с высокими привилегиями с привилегиями SYSTEM, он предупреждает пользователя. Я делаю это с драйвером, который следит за каждым созданием процесса, и с приложением пользовательского режима, чтобы проверить, работает ли оно в SYSTEM, и если да, чтобы сделать предупреждение. Для этого приложение в пользовательском режиме должно прослушивать драйвер. Я пытаюсь сделать это с событием. Всякий раз, когда процесс создается, драйвер сообщает о событии с помощью IoCreateNotificationEvent (который приложение режима использования слушает с помощью WaitForSingleObject), а затем приложение отправляет IRP драйверу для получения pid. Это не очень хорошо для меня, и я искал другие способы сделать это от драйвера до прослушивающего пользовательского режима приложения, и я не мог найти это .. Как я могу заставить это работать?

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Еще один способ связи между драйвером и процессом пользовательского режима - процесс пользовательского режима открывает канал в режиме сообщений и прослушивает сообщения из ядра. Это проще, чем реализовать асинхронный IOCTL, поскольку вам не нужно иметь дело с ожидающим IOCTL, который, возможно, придется отменить. Убедитесь, что когда вы открываете канал, он правильно работает с ACL, так что только ядро ​​может общаться с каналом, открытым процессом пользовательского режима.

0 голосов
/ 31 октября 2018

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

...