Настройка оборудования и программного обеспечения

Как подружиться с Procmon

(ProcMon) от Sysinternals.

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

Вообще, по моему мнению всё, что касается ProcMon лучше всего описано в книге от разработчиков, которая так и называется “Утилиты Sysinternals. Справочник администратора ”.

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

Запуск ProcMon

Регистрирует активность файловой системы, реестра, сети, процессов, потоков, а также загрузку образов в реальном времени.

Ну как? Понятно? ????

Если просто запустить ProcMon рабочее окно программы моментально заполнился разными событиями, даже если вы ничего не делаете. Разобраться в этих событиях, и найти интересующие даже опытному мастеру очень сложно. Да и не нужно, но обо всём по порядку.

Чаще всего ProcMon запускается с конкретной целью, например, определить, что делает та, или иная программа, какой процесс пишет файлы в определённый каталог или ветвь реестра, куда девается место на диске, и т.д. Поэтому, если просто запусить ProcMon то придётся остановить сбор событий (Ctrl+E ), очистить уже собранные события (Ctrl+X ), настроить фильтры (Ctrl+L ), и снова запустить наблюдение. Для того, чтобы не делать столько лишний движений предусмотрен параметр командной строки /noconnect :

procmon /noconnect

Запуск с этим параметром запускает Procmon, но не начинает наблюдение, вместо этого сразу же открывается окно фильтров.

Вообще для упрощения запуска, я делаю (и всем советую делать так) как описывается всё в той же книге:

Мой соавтор Аарон обычно создает папку C:\Program Files\Sysinternals и распаковывает в нее содержимое пакета Sysinternals Suite. Там утилиты невозможно изменить без прав администратора. Затем он добавляет этот каталог в системную переменную окружения Path, что позволяет легко запускать утилиты откуда угодно, в том числе через меню Start | Run (Пуск | Выполнить ).

Фильтры в ProcMon

Как было сказано выше окно фильтров открывается при запуске с параметром /noconnect . Если вы его нечаянно закрыли, или нужно подправить уже настроенные фильтры, открыть окно фильтров можно сочетанием клавиш Ctrl+L , или через меню Filter | Filter… .

Вот мы и добрались до практики ????

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

Итак, у нас открыто окно фильтров.

Фильтры в ProcMon

На всякий случай нажимаем кнопку сброса фильтров в состояние по умолчанию – Reset (по умолчанию в ProcMon настроено до фига фильтров, не рекомендуется их удалять) и добавляем фильтр

Process Name is notepad.exe include .

Нажимаем кнопку Add . Как можно понять из названия захватываться будут только события, связанные с процессом notepad.exe, т.е. те события, которые генерирует блокнот.

Важный момент: имя процесса должно быть указано полностью – с расширением, иначе ProcMon ничего не захватит. Как вариант можно использовать фильтр

Process Name begins with notepad include

В таком случае будут захвачены события, связанные с процессами, начинающимися на notepad, это может быть как стандартный блокнот, так и Notepad++ , или какой-нибудь ещё блокнот. Таким же образом добавляем фильтр на запись файлов:

Operation is WriteFile include

Нажимаем Add иOK (вообще можно просто нажать OK , в таком случае ProcMon скажет, что такого фильтра ещё нет, и спросит хотим-ли мы его добавить. Дело в том, что нажатие кнопки закрывает OK окно фильтров, если это не единственный фильтр, то лучше нажать кнопку Add , это позволит добавить фильтр, и оставить окно фильтров открытым для последующих фильтров).

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

Ещё один важный момент.

По умолчанию ProcMon регистрирует всю активность системы, даже те события, которые не попадают под фильтры, что в некоторых случаях может приводить к подтормаживанию работы. Если вы уверены в том, что фильтры настроены правильно (в данном примере мы уверены), и вам не нужны события, скрытые ими – их можно отбросить при помощи опции Filter | Drop Filtered Events (Удаление отфильтрованных событий) в меню Filter . Данный параметр действует только на регистрацию текущих событий, ранее записанные события из журнала не удаляются.

После того как фильтры настроены запускаем сбор событий (кнопка с изображением лупы, или Ctrl+E ). Запускаем блокнот, пишем какой-то текст и сохраняем файл. Смотрим, что получилось:

Файловая активность в ProcMon

Как видно из скриношота ProcMon зафиксировал событие записи файла процессом notepad.exe по пути C:\temp\test.txt .

Проведём ещё один эксперимент.

Остановим захват событий (Ctrl+E ), закроем блокнот и очистим собранные события (Ctrl+X ). Вызовем окно фильтов (Ctrl+L ), сбросим фильтры (кнопкой Reset ) и добавим следующий фильтр:

Path begins with c:\temp\

Этим самым мы указываем, что нас интересует любая активность по пути C:\temp . А так как значение указано не точно (не is , а begins with ), то захватываться будут события не только из этого каталога, но и из всех его подкаталогов.

Проверьте, чтобы было включено наблюдение только за файловой системой (при сбросе фильтров всё сбрасывается в состояние по умолчанию)

Фильтры в ProcMon

Запустим наблюдение. Откроем проводник и перейдём по нашему пути. Заглянем в ProcMon.

Так выглядит открытие каталога в ProcMon

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

Можете открыть файл и посмотреть какая неразбериха будет в ProcMon. Вот почему я никогда не советую запускать ProcMon только для того, чтобы посмотреть, что там происходит в системе.

Для того, чтобы увидеть сами события чтения файла, остановите сбор событий, очистите окно результатов, добавьте фильтр

Operation is ReadFile

и снова откройте файл.

Должно получиться, что-то вроде этого (как видно из скриншота я открывал файл двумя разными процессами):

Понравилась статья? Поделитесь с друзьями!
Была ли эта статья полезной?
Да
Нет
Спасибо, за Ваш отзыв!
Что-то пошло не так и Ваш голос не был учтен.
Спасибо. Ваше сообщение отправлено
Нашли в тексте ошибку?
Выделите её, нажмите Ctrl + Enter и мы всё исправим!