Справка по FileMon-у
Опубликованно: Zormax , Включено: Jun-01-2004
Краткая cправка по FileMon-у
Если расчитывать на то, что мою небольшую справку по RegMon-у Вы уже прочитали, то кажется, что достаточно написать только о том, чем они между собой отличаются. Так я сразу и собирался сделать, но после передумал. Скажу честно, побоялся вконец запутаться, тем более, что FileMon я знаю меньше. Да и кроме того, если кому-нибудь нужна будет информация только об этой утилите, не придется читать описание обоих. Так что будем писать все по-порядку.
Написанное будет соответствовать 6-ой версии программы. Если Вы еще не обзавелись ею, можете взять прямо здесь. Этот файл не русифицирован, потому как программа обновляется очень часто и за переводами не угонишься, а кроме того количество пунктов меню и диалогов в программе невелико и разобраться с ними будет несложно. Назначение FileMon-а в отслеживании обращений к файловой системе Вашего компьютера. При этом пользователю FileMon-a можно будет увидеть, какие файлы открывала некая программа (или даже только пыталась это делать), из какого фрагмента файла происходило чтение и каков был размер прочитанных блоков данных. Аналогично и для операций записи в файлы. Но об этом, как и о других возможностях программы, будет написано далее. А пока рассмотрим что именно можно увидеть в окне программы.
Итак, для каждого перехваченной операции обращения к объектам файловой системы в столбцах таблицы последовательно показаны: # - номер текущей записи (в том порядке, в котором были перехвачены обращения к файлам). Пропуски номеров означают, что из-за переполнения буфера FileMon не справляется с потоком. Выход один - фильтровать сообщения. Time - время перехвата (можно выбрать или текущее время или время в секундах (восемь разрядов после запятой) отсчитываемое от запуска программы или последней очистки окна) Process - иконка программы, имя и 32-битный идетификатор того процесса, из которого происходит вызов функции обращения к файлам. Для случая, когда мы следим за каким-то EXE-файлом, обычно имя его процесса будет отображаться не более чем 8-ю первыми буквами имени этого файла. В любом случае, что бы не забивать отчет ненужными Вам сведениями, следует отфильтровать все процессы, кроме исследуемого. Об этом несколько подробнее будет дальше. Request - фактически это эквивалент имени функции, которую запросил текущий процесс для проведения некоторых файловых операций. Path - путь к файлу или каталогу, на который воздействовала функция. Часть пути может быть представлена и некоей файловой маской (например c:\*.tmp), что обычно означает, что происходит поиск (перебор) файлов, имена которых соответсвует некоторому шаблону. Result - результат, который возвратила функция. Результат вызова API-функции может содержать не только успешную информацию, но и, например, номер произошедшей ошибки. FileMon показывает этот номер в виде имени константы, соответствующей этой ошибке. Наиболее частые результаты в FileMon-e: SUCCESS, NOTFOUND, NOMORE, ACCDENIED и, я думаю, они говорят сами за себя. Other - информация о других используемых или возвращаемых функцией данных. Что именно покажет FileMon, сильно зависит от конкретной функции и от решения авторов программы о важности этой информации. Например, при открытии файла (Open) всегда сообщается о режиме в котором файл будет открыт (например наборчик CREATENEW REPLACEEXISTING WRITEONLY означает приблизительно следующее: "Открыть файл только для записи, если его нет, создать новый, если файл есть, то заменить его содержимое"). Некоторые функции (например Delete) при выполнении ничего в поле Other не помещают.
Теперь Вы знаете, что нам показывает программа в отчете-таблице. Сейчас немного о командах меню и соответствующих им кнопочкам панели инструментов.
Панель инструментов
File Load - Можно открыть из файла ранее сохраненный отчет и просмотреть его Save - Вы можете сохранить содержимое окна в файл отчета (текст, разделенный табуляторами). Вы можете просматривать отчет, открыв его, например в Excell. На панели инструментов - кнопочка в виде дискетки Save As... - можете выбрать другое расположение и имя для файла отчета Path Properties... - показывает свойства выделенного файла или папки (если использована маска, то команда обламывается:- ) Process Properties... - можно посмотреть на некоторые свойства выделенного в таблице процесса ( негусто там их
Capture Events - включает/выключает режим перехвата обращений к файлам. На панели инструментов это кнопка-лупа Exit - дело сделано, уходим Edit Copy - скопировать в буфер только выделенные части таблицы (строки копируются целиком) Delete - удалить из таблицы выделенные записи Далее идут несколько команд для фильтрации, причем по вашему желанию измененные фильтры могут быть применены и к уже отмониторенным операциям
Iclude Process - добавляет выделенный процесс в группу отслеживаемых Exlude Process - добавляет выделенный процесс в группу игнорируемых Include Path - добавляет путь из выделенной строки в список отслеживаемых Exlude Path - добавляет путь из выделенной строки в список игнорируемых Find... - поиск строки, содержащей указанный Вами текст (производится по всем столбцам) . Если есть в списке выделенная строка, то поиск начнется c нее, если нет, то c начала списка. Кнопка в виде бинокля. Explorer Jump... - быстрый переход в Проводнике к файлу или папке, соответствующими графе Path. Если путь не существует, то переход будет осуществлен по возможности как можно ближе к запрошенному месту. Удобно вызывать также двойным щелчком мыши или нажатием на кнопку в виде значка, стандартного для Проводника. Clear Display - удаляет все записи из таблицы. Если записей уж очень много, лучше не использовать эту команду, а закрыть программу и открыть ее снова. Этим вы сэкономите уйму времени и иногда предотвратите зависание FileMon-a. Команде соответствует кнопочка, изображающая ластик, уже почти стерший полсписка (и тут он не слишком быстр: ) Options Font... - выбор шрифта для окна Highlight Colors... - выбор двух цветов FG-цвета текста и BG-цвета фона для подсвечиваемых записей Filter/Highlight... - определение фильтров для отображения и подсветки (подробности позже). Значок - воронка, через которую что-то льется History Depth... - возможность ограничить максимальное число перехватываемых обращений к реестру (0 - без ограничений). Значок на панели инструментов - усеченный список. Auto Scroll - включить/отключить автопрокрутку содержимого окна, так чтобы всегда можно было видеть последнюю запись. Значок - список со стрелочкой, направленной в конец списка. Clock Time - если включено, то для перехваченного события фиксируется текущее время (по системным часам компьютера). Значок переключается от часов до секундомера соответственно выбранному режиму Show Milliseconds - дополнительно в цифре времени показывать и миллисекунды (только для режима фиксации системного времени) Always On Top - поместить окно программы поверх всех окон Help Help... - вызов очень краткой справки на английском языке About... - скромное напоминание о том, кто это все для нас соорудил. И спасибо им за это! А теперь ( я еще не надоел Вам?) коротко об некоторых функциях, которые можно увидеть в окне отчета: GetDiskInfo Название говорит само за себя: получение информации о логическом диске. В графе Other я все время вижу Free Space, что означает, по видимому, что процессу была нужна информация о доступном свободном пространстве на этом диске. Attributes Функция объединяет в себе все операции с атрибутами файла и его датами. Если в поле Other указано GetAttributes, то значит функция только вычитывала атрибуты, а вот если там SetAttributes, то значения атрибутов функцией изменялись. Если же Вы видите в поле Other одно из этих значений: Get Creation, Get Access или Get Modify, значит функция применялась для определения даты файла (соответственно даты создания, последнего доступа и модификации). Наличие одного из этих значений Set Creation, Set Access или Set Modify в Other однозначно говорит о том, что функция изменяла одну из этих дат. Не буду повторять их, но зато для новичков в ентом деле сообщу (уж придется поверить мне на слово
, что любые измения атрибутов и дат файла никак не затрагивают его самого, а вся эта информация записывается не в файл, а в специально отведенные места на диске. Именно к этим местам и обращается впоследствии операционная система для получения нужной ей информации о файловых атрибутах и датах (в принципе даже возможна и такая ситуация: файла уже нет в помине, а получить информацию о нем не составляет труда). Directory Группа операций над директориями. Смотрим в последнее поле и если CREATE, значит речь идет о создании нового каталога, если DELETE, то об удалении существующего, если CHECK или QUERY, то спросите у кого-нибудь другого
. Open Открывает (иногда перед этим и создает) файл для дальнейших операций над ним. Seek Функция задает текущую позицию в файле для операций чтения и записи. В поле Other сначала указывается запрашиваемая позиция (если Beginning, то от начала файла, End - от конца), а через дробь новая позиция (всегда относительно начала файла) уже после выполнения функции. Для тех, кто не знаком с азами программирования: все позиции отсчитываются от нуля. Read Понятно, что эта функция читает некоторый непрерывный блок данных из файла. В последней графе при этом видно с какой позиции началось чтение (Offset) и какова длина блока прочитанных данных (Length). Write Аналогично предыдущей функции, но только уже для записи данных в файл. Close Функция закрывает ранее открытый файл. Если после этой команды файл все еще остается открытым для какого-нибудь другого процесса, то в графе Other будет информация CLOSE_FOR_PROCESS, в противном случае там будет CLOSE_FINAL. Rename Неужели и это требует пояснений? Новое имя для файла можно будет увидеть в графеOther. Обратите внимание, что файл при этом может быть так же перемещен в другой каталог. Delete Провожает файл в последний путь (сорри, удаляет
FindOpen Эта функция начинает поиск файлов/ каталогов с заданной маской имени в определенной папке. После успешного выполнения этой функции в поле Other помещается имя первого файла/каталога, соответствующего маске. FindNext Используется для продолжения поиска, начатого предыдущей функцией. Если больше файлов не найдено, результат вызова будет NOMORE. Кстати, надо сказать, что описанные функции поиска позволяют выяснить о найденном файле не только какое у него имя, но и множество иной информации. Например, можно узнать даты создания, модификации и последнего доступа для этого файла, а также его размер и атрибуты. К сожалению вся эта информация не видна пользователю программы. FindClose Как Вы уже догадались, эта функция завершает ранее начатый цикл поиска файлов/папок. Ioctl Э-э-э...м-м-м... Кто бы мне это самому толком обяснил: "выполняет заданную операцию с устройством". Other содержит что-то вроде Subfunction: 08h (похоже, конкретный номер операции) Вряд ли Вам захочется видеть сразу всё, что имеет хоть какое-нибудь отношение к файловым операциям. Поэтому нам не обойтись без фильтра монитора. Откроем его диалоговое окно. Первый элемент фильтра это Include, то есть фильтр того, что мы хотели бы включить в отчет. Важно знать, что фильтрация происходит не по отдельным колонкам, а по строкам таблицы отчета целиком за исключением только номера записи и времени перехвата. Например, внесение в это поле названия функции приведет к перехвату именно этой функции, а ввод имени процесса позволит следить именно только за этим процессом. Допустимо использование символа подстановки * для определения произвольного фрагмента строки (например, фильтр ms*.dll дает возможность следить за любыми упоминаниями DLL файлов с имена, начинающмимся с букв ms /обычно это продукция компании MicroSoft/). Можно вводить любое количество фильтров, разделяя их между собой точками с запятой. Регистр при фильтрации не учитывается.
Второй элемент фильтра это Exclude:, то есть фильтр того, что мы не хотели бы видеть в отчете. Таким способом можно исключить из отчета какие-нибудь программы, очень уж активные в обращениях к файлам и этим сильно захламляющие наш отчет, или отключить некую папку из мониторинга, если нам не неинтересна активность внутри ее и тд. Синтаксис аналогичен фильтру Include.
Третий элемент, Highlight, это вообщем-то и не фильтр вовсе. Он не влияет на то, будет или нет отображаться вызов некоторой функции, а влияет лишь на то, будет ли он подсвечен (не забыли выбрать цвета подсветки?). Подсветка позволяет среди большого количества строк найти то, что Вас сейчас интересует. Синтаксис аналогичен фильтру Include. Этот фильтр можно менять на лету и изменения будут применены для уже отображенных ранее записей.
Удобно, что программа запоминает историю ввода фильтров, и Вы позже сможете вновь воспользоваться ими. Кстати, при перезапуске программа восстанавливает последний набор фильтров. Имейте это ввиду! Кроме строковых фильтров в диалоге есть несколько переключателей, которые могут производить фильтрацию по несколько другим критериям. Так например можно отслеживать только открытие файлов - надо включить только Log Opens. Можно отключить фиксацию операций чтения ( выключить Log Reads) и следить только за тем, что в него записывается (включить Log Writes). Пусть вас не смущает, если одни и те же строки будут попадать в отчет при абсолютно разных позициях переключателей. Например, и для того, чтобы прочесть что-нибудь из файла и для того, чтобы в него записать что-нибудь, все равно ведь надо файл этот открыть, ну а после и закрыть. Вот и получаются такие накладочки, но фильтры эти тем не менее очень нужные. Можно применить новый фильтр даже не закрывая диалоговое окно, просто нажав на кнопку Apply. А чтобы сбросить все фильтры в значение по умолчанию, предусмотрена кнопка Defaults в диалоговом окне фильтра.
Если Вы все усвоили, можно приступать к исследованиям. Напоследок одно из возможных применений FileMon-a: настроив фильтры на слежку за какой-либо конкретной программой, не желающей запускаться и выбрасывающей что-то вроде "File not found!/Файл не найден!", можно, обратив внимание на то, что именно она пытается открыть и при этом не находит, определить недостающие или неверно расположенные файлы. Ну и, конечно, не забудьте, попробовать применить FileMon в более полезных исследованиях...
Copyright © 2002-2004 SNC