Мониторинг запуска процесса в системе - PullRequest
7 голосов
/ 16 ноября 2008

Есть ли способ контролировать процессы, запускающиеся в системе, до их запуска?

Пример:
В таких программах, как ZoneAlarm или Antivirus, когда вы запускаете программу, она спрашивает вас, разрешаете ли вы запускать эту программу или нет до ее запуска ...

Ответы [ 4 ]

7 голосов
/ 16 ноября 2008

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

Существует специальный API для этого в NT-вариантах Windows (NT / 2000 / XP / Vista), называемый PsSetCreateProcessNotifyRoutine (). К сожалению, вы можете вызывать эту функцию только из ring0, так что это нужно сделать в драйвере. В этой статье CodeProject есть удобное объяснение (и код): http://www.codeproject.com/KB/threads/procmon.aspx.

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

6 голосов
/ 16 ноября 2008

Вы должны проверить проект easyhook-continue-detours , который является .NET-портом проекта Microsoft Detours . Это позволит вам подключать неуправляемые API (такие как CreateProcess). Посмотрите примеры кода для простой FileMon-подобной программы здесь .

3 голосов
/ 16 ноября 2008

Вы можете узнать, когда процессы запускаются с использованием потребителя ETW в реальном времени - однако, чтобы иметь возможность предпринять какое-то действие, которое может отменить запуск процесса, вам придется что-то сделать теневой / недокументированный, такой как перехват CreateProcess или использование драйвера фильтра ядра для блокировки чтения в EXE.

2 голосов
/ 16 ноября 2008

Просто используйте уведомления о создании процесса. Это включено в Windows. Вам не нужно ничего зацеплять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...