Есть ли способ получить событие из окна при каждом новом запуске? - PullRequest
4 голосов
/ 02 марта 2010

Я хочу получать уведомление каждый раз, когда операционная система запускает новый процесс.
Обратите внимание, что мне это нужно в собственном коде (я знаю, что это можно сделать в управляемом коде с использованием членов System.Management).
Дополнительные баллы, если есть способ получить его до запуска процесса :) (т.е. во время его инициализации)

Спасибо.

Ответы [ 3 ]

2 голосов
/ 02 марта 2010

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

В пользовательском пространстве вы можете попытаться создать оконную зацепку, которая будет работать, если такое приложение использует окна, но в остальном довольно неприятна.

С другой стороны, вы можете попробовать использовать WMI , которая является базовой технологией, используемой в C #. Вы можете искать указатели в этом ответе и в этом примерах .

0 голосов
/ 03 марта 2010

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

0 голосов
/ 02 марта 2010

Вы не можете контролировать создание процесса или зарегистрировать обратный вызов из пространства пользователя. Может быть, эта статья может помочь. "Подключение собственного API и управление созданием процессов в масштабе всей системы"

Чтобы просто зарегистрировать обратный вызов, вы можете использовать PsSetCreateProcessNotifyRoutine, доступный в MS DDK. Его использование с примером можно найти в www.codeproject.com/KB/threads/procmon.aspx

...