уведомление о выходе/удалении процесса в драйвере KMDF

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

Один из способов, которым я думал сделать это, - поделиться с драйвером событием, созданным приложением. Я создам рабочий поток в драйвере и заставлю его ждать события, созданного пользователем, и когда приложение завершится, ожидание прервется. Это хороший способ узнать, когда процесс завершен/закрыт, или есть более стандартные способы сделать это? Я читал на некоторых форумах, что совместное использование событий не является хорошей идеей и что я должен использовать перекрывающиеся ioctl, но здесь это явно не сработает.


person Raghu    schedule 17.09.2012    source источник


Ответы (2)


Решено: вот что я сделал: (Мой драйвер - монолитный драйвер верхнего уровня)

  1. Использовал ZwOpenProcess с идентификатором процесса, чтобы получить дескриптор процесса.

  2. Используется ObReferenceObjectByHandle с дескриптором процесса для получения объекта диспетчера.

  3. Создал системный поток с помощью PsCreateSystemThread и передал отправленный объект.

  4. Создал системный поток, созданный на предыдущем шаге, для ожидания отправленного объекта с помощью KeWaitForSingleObject.

  5. Завершал процесс программно или вызывал исключение и просто закрывал его с помощью кнопки X gui. Все они разбудили созданный системный поток.

По сути, это дает мне уведомление, когда интересующие процессы завершаются.

person Raghu    schedule 18.09.2012

Просто используйте PsSetCreateProcessNotifyRoutine и проверьте ProcessId.

person greenboxal    schedule 18.09.2012
comment
спасибо гринбокс. Я искал альтернативные способы сделать это, и я не хочу использовать PsSetCreateProcessNotifyRoutine, если только нет другого способа сделать это. - person Raghu; 18.09.2012