Как реализовать «обратный» ioctl, чтобы драйвер уведомлял об обратном вызове вызываемого пользовательского приложения? - PullRequest
0 голосов
/ 22 января 2020

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

1 Ответ

0 голосов
/ 22 января 2020

Обычное средство - порты завершения ввода-вывода и асинхронное завершение IOCTL. Сокеты Windows имеют несколько ioctl, которые ведут себя аналогичным образом (например, уведомления об изменении доступных интерфейсов). Ваш клиент откроет драйвер в режиме перекрытия, свяжет возвращенный дескриптор с IOCP и предоставит экземпляр OVERLAPPED, чтобы связать запрос с любыми данными, которые нужны вашей программе. Драйвер сохранит IRP для IOCTL во внутренней очереди и вернет STATUS_PENDING. Когда происходит событие, IRP отключается и завершается.

...