Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

.net >=3.5 как отловить возникновение нового процесса в системе

#net


Собственно, как реализовать наблюдение за возникновением процессов? Вариант с перечислением
процессов по таймеру не подходит, поскольку часть быстро отработавших процессов он
не покажет
    


Ответы

Ответ 1



Простого хука на событие создания процесса не существует. Если процессы создаются и пропадают слишком быстро, то перечисляйте ещё чаще. Обратите внимание, что ни стандартный Task Manager, ни продвинутый Process Explorer, написанный Руссиновичем, который знает все потроха Windows, не умеют отлавливать быстро завершившиеся процессы, если это не позволяет разрешение таймера. Думаю, если бы такая возможность существовала в нормальном виде, то ей бы воспользовались. Если вы готовы на подвиги (и готовы распрощаться с .NET), то у вас два пути: Написать драйвер, прицепиться к событию создания процесса PsSetCreateProcessNotifyRoutine, прокидывать сообщения в своё приложение. Перехватывать вызовы CreateProcess и подобные. Пример с драйвером можете найти в статье Detecting Windows NT/2K process execution.

Ответ 2



Такой возможности, встроенной во фреймворк, я не знаю. Братский сайт рекомендует WMI (что требует довольно сложного кода и P/Invoke), кроме того упоминается решение с TraceEvent'ами (которое вроде бы «более» синхронное). Заметьте, что с завершением процесса всё гораздо проще: просто воспользуйтесь event'ом Process.Exited.

Комментариев нет:

Отправить комментарий