Как узнать к каким файлам обращается программа


Process Monitor 3.0 – утилита для мониторинга процессов ОС Windows

2012-03-26

Разработчики из Windows Sysinternals выпустили новую версию утилиты Process Monitor 3.0, популярной утилиты для мониторинга системы. Этот полезный инструмент предоставит подробную и актуальную информацию об активности всех приложений, выполняемых на вашем ПК. В том числе пользователь сможет узнать, к каким файлам обращаются программы, с какими ключами реестра взаимодействуют, какие процессы запускаются от их лица и многое другое. Предлагаемая версия не может похвастаться большим количеством новых функций, однако некоторые предложенные изменения наверняка вызовут интерес у пользователей.

К примеру, с помощью предлагаемого инструмента пользователь сможет выявлять причины утечек системных ресурсов, происходящих в его отсутствие. Для решения указанной задачи запустите Process Monitor, выберите опцию «Capture Events» в меню «File» и изучите имена процессов в левой части экрана. На этой панели можно найти информацию о файлах, открываемых и закрываемых различными процессами, и узнать к каким ключам реестра обращается интересующая вас программа. Эта информация поможет обнаружить нежелательные программы, например приложения, работающие в фоновом режиме и удалить их с целью высвобождения ресурсов системы. Не менее полезной утилита окажется при решении проблем в работе компьютера. Допустим, вы пытаетесь запустить программу под названием app.exe, однако приложение неожиданно завершает свою работу сразу же после запуска. Благодаря Process Monitor вы сможете идентифицировать отсутствующие файлы или неправильно настроенные параметры приложения.

При запуске новой процедуры трассировки, пользователь нередко получает отчет внушительных размеров, содержащий сотни и тысячи строк. Размер отчета можно слегка сократит с помощью специальных фильтров, однако, даже после этого можно будет наблюдать некоторый переизбыток информации. Вниманию пользователей версии Process Monitor 3.0 предлагается поддержка закладок, предназначенных для выделения наиболее важных данных (опция «Toggle Bookmark» в контекстном меню). Новая функция может использоваться даже со старыми отчетами. Выбранные пользователем строки для лучшей видимости выделяются полужирным шрифтом. А переход между закладками осуществляется одним нажатием на кнопку. Благодаря этому нововведению, владелец компьютера сможет быстро и без лишних усилий обнаружить всю интересующую его информацию.

В версии Process Monitor 3.0 был усовершенствован механизм записи переменных окружения, в особенности в момент запуска процесса. Выберите приложение и выполните операцию «Process Start», после чего вы увидите папку, из которой запускается конкретная программа и полную копию его текущего окружения. Разработчики также сообщают, что выпущенная версия утилиты может похвастаться более тесной совместимостью с новой операционной системой Windows 8.

Копию приложения можно бесплатно загрузить с сайта производителя – http://technet.microsoft.com/en-us/sysinternals/bb896645.

Мониторинг доступа к файлам / Хабр

Зачастую пользователям и системным администратором необходимо отслеживать, к каким файлам обращается приложение. В Linux-е уже есть все средства для этого, и тем удивительнее постоянно слышать на форумах — есть ли аналог Sysinternal Filemon. В данной статье я опишу использование утилиты strace, и рассмотрю ряд моментов, которые ускользают от некоторых пользователей, полагающих, что приложениям надо ограничивать права даже на чтение, например, ограничить доступ mplayer-а только к показываемому фильму.

strace — это трассировщик системных вызовов и сигналов. Для работы с файлами используется системный вызов «open», и соответственно, необходимо отслеживать только его. Пример команды:
$ strace -xf -eopen -o /path/to/log /path/to/program

Здесь мы указываем отслеживать все дочерние процессы, заменять непечатаемые символы на шестнадцатеричное представление и сохранять лог вызовов в файл /path/to/log. Потом полученный лог можно обработать соответствующими инструментами. Далее будут приведены примеры, как можно вычленить из лога всю нужную информацию.

Мониторинг текстового редактора nano

Для начала посмотрим, к каким файлам обращается простейший текстовой редактор nano:
$ strace -xf -eopen -o out.log nano temp.txt
$ sed -n 's/.*open(\(.*\))\s*=.*/\1/p' out.log | sort

Командой sed мы преобразуем лог в более краткий формат для читабельности, и сортируем строчки. В итоге должно вывестись что-то типа такого:
"/etc/ld.so.cache", O_RDONLY
"/etc/nanorc", O_RDONLY
"/home/nuald/.nano_history", O_RDONLY
"/home/nuald/.nano_history", O_WRONLY|O_CREAT|O_TRUNC, 0666
"/home/nuald/.nanorc", O_RDONLY
"/lib/libc.so.6", O_RDONLY
"/lib/libdl.so.2", O_RDONLY
"/lib/libncursesw.so.5", O_RDONLY
"/lib/terminfo/x/xterm", O_RDONLY
"temp.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666
"/usr/lib/gconv/gconv-modules.cache", O_RDONLY
"/usr/lib/locale/en_US.utf8/LC_ADDRESS", O_RDONLY
. .. другие библиотеки для работы с локалью
"/usr/lib/locale/locale-archive", O_RDONLY
"/usr/share/locale/en/LC_MESSAGES/nano.mo", O_RDONLY
... другие файлы локализации
"/usr/share/locale/locale.alias", O_RDONLY

Можно выделить следующие категории файлов, к которым обращается программа:

  • Конфигурация nano (nanorc, ~/.nano_history)
  • Динамические библиотеки, используемые программой (libc и др.)
  • Файлы локализации
  • И собственно редактируемый файл

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

Мониторинг видеопроигрывателя mplayer

Теперь попробуем запустить mplayer и проверить те файлы, в которые он только пишет. Возможно, это нам даст возможность составить нужный безопасный профиль работы программы.

$ strace -xf -eopen -o out.log mplayer test.mp4
$ sed -n 's/.*open(\(.*\))\s*=.*/\1/p' out.log | grep -v O_RDONLY | sort

"/dev/3dfx", O_RDWR
"/dev/fb0", O_RDWR
"/dev/mga_vid", O_RDWR
"/dev/mga_vid", O_RDWR
"/dev/shm/pulse-shm-3056117003", O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW|O_CLOEXEC, 0400
"/home/nuald/.mplayer/config", O_WRONLY|O_CREAT|O_EXCL, 0666
"/home/nuald/.pulse-cookie", O_RDWR|O_CREAT|O_NOCTTY, 0600
Здесь мы командой grep ограничили вывод, и не включали файлы, которые были открыты с флагом O_RDONLY (только на чтение). Как видите, и здесь не все так гладко — mplayer-у приходится писать в другие файлы, и возможно ограничение доступа полностью его сломает, и он не сможет воспроизводить видео. Так что приведенную выше идею об ограничении доступа не так просто будет реализовать, и точно не реализовать в ее изначальном смысле.

Заключение

В этом небольшом эскурсе была приведена лишь одна область применения strace. У данной программы есть много замечательных способностей, и она может позволить избавиться от бессонных ночей в поисках причин неработоспобности приложений даже без применения отладчика. Это инструмент, который должен знать любой Linux-разработчик, и надеюсь, что это принесет вам пользу в борьбе с многочисленными багами, и повысить качество разрабатываемого программного обеспечения.

P.S. Приведу список других инструментов, полезных для мониторинга доступа к файлам:

  • SystemTap — инструментарий для сбора статистики. Острожно — требует debug-версии ядра (из него он берет отладочные символы и информацию). Пример мониторинга операции «open» описан в документации.
  • /proc/sys/vm/block_dump — Отладка блокового ввода-вывода.
  • inotify -подсистема ядра Linux, которая позволяет получать уведомления об изменениях в файловой системе. Можно использовать через inotify tools.

экспорт — найти файлы, которые использует программа

спросил

Изменено 9 лет, 1 месяц назад

Просмотрено 25 тысяч раз

У меня есть программа, содержащая данные, которые я хочу перенести на другой компьютер. Проблема в том, что программа не предоставляет никакого способа экспортировать эти данные. Существует ли какое-либо программное обеспечение, которое позволит вам узнать, какие файлы использует программа? Я знаю, что есть программы, которые по заданному файлу сообщают вам, какая программа его использует, но я ищу противоположное.

  • экспорт

3

Вы можете использовать средство просмотра дескрипторов Process Explorer ( View->Lower Pane View->Handles ), чтобы просмотреть все файлы, открытые процессом на компьютере с Windows.

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

Если этого недостаточно, Process Monitor покажет вам полный журнал всех операций с файлами и реестром, которые выполняет процесс. Это может помочь, если вы обнаружите, что пропустили что-то (например, ключ реестра) после его перемещения.

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

1

Process Hacker очень похож на Process Explorer и также бесплатен, но с открытым исходным кодом. Это также позволяет вам узнать, какие файлы используются процессом.

Process Explorer хорош, но он показывает только то, что запущено в данный момент, библиотека может просто использоваться для инициализации, а затем отбрасываться или использоваться только в какое-то неясное время. Dependency Walker может быть тем, что вам нужно.

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie

файловых систем — Узнайте, какой процесс блокирует файл или папку в Windows

Вы также можете сделать это программно, используя Windows API NTDLL/KERNEL32. Например. взгляните на следующий код в Python, который возвращает список PID, которые затем можно легко убить с помощью диспетчера задач или аналогичных инструментов.

 типы импорта из ctypes импортировать wintypes путь = r"C:\temp\test.txt" # -------------------------------------------------- ---------------------------- # общие строки и константы # -------------------------------------------------- ---------------------------- ntdll = ctypes.WinDLL('ntdll') kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) NTSTATUS = типы_виндов.LONG INVALID_HANDLE_VALUE = wintypes.HANDLE(-1).значение FILE_READ_ATTRIBUTES = 0x80 FILE_SHARE_READ = 1 ОТКРЫТО_СУЩЕСТВУЮЩЕЕ = 3 FILE_FLAG_BACKUP_SEMANTICS = 0x02000000 FILE_INFORMATION_CLASS = типы_виндов.ULONG FileProcessIdsUsingFileInformation = 47 LPSECURITY_ATTRIBUTES = wintypes.LPVOID ULONG_PTR = типы_виндов.WPARAM # -------------------------------------------------- ---------------------------- # создать дескриптор соответствующего файла с помощью dwDesiredAccess == FILE_READ_ATTRIBUTES # -------------------------------------------------- ---------------------------- kernel32. CreateFileW.restype = wintypes.HANDLE kernel32.CreateFileW.argtypes = ( wintypes.LPCWSTR, # В lpFileName wintypes.DWORD, # В dwDesiredAccess wintypes.DWORD, # В dwShareMode LPSECURITY_ATTRIBUTES, # In_opt lpSecurityAttributes wintypes.DWORD, # В dwCreationDisposition wintypes.DWORD, # В dwFlagsAndAttributes wintypes.HANDLE) # In_opt hTemplateFile hFile = kernel32.CreateFileW( путь, FILE_READ_ATTRIBUTES, FILE_SHARE_READ, нет, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, нет) если hFile == INVALID_HANDLE_VALUE: поднять ctypes.WinError (ctypes.get_last_error()) # -------------------------------------------------- ---------------------------- # подготовить типы данных для системного вызова # -------------------------------------------------- ---------------------------- класс IO_STATUS_BLOCK (ctypes.Structure): класс _STATUS(ctypes.Union): _fields_ = (('Статус', NTSTATUS), («Указатель», wintypes.LPVOID)) _anonymous_ = '_Статус', _fields_ = (('_Статус', _СТАТУС), ("Информация", ULONG_PTR)) iosb = IO_STATUS_BLOCK() класс FILE_PROCESS_IDS_USING_FILE_INFORMATION(ctypes. Structure): _fields_ = (('NumberOfProcessIdsInList', wintypes.LARGE_INTEGER), ('ProcessIdList', wintypes.LARGE_INTEGER * 64)) информация = FILE_PROCESS_IDS_USING_FILE_INFORMATION() PIO_STATUS_BLOCK = ctypes.POINTER(IO_STATUS_BLOCK) ntdll.NtQueryInformationFile.restype = NTSTATUS ntdll.NtQueryInformationFile.argtypes = ( wintypes.HANDLE, # В дескрипторе файла PIO_STATUS_BLOCK, # Out IoStatusBlock wintypes.LPVOID, # Out FileInformation wintypes.ULONG, # по длине FILE_INFORMATION_CLASS) # В FileInformationClass # -------------------------------------------------- ---------------------------- # системный вызов для получения списка PID, которые в данный момент используют файл # -------------------------------------------------- ---------------------------- статус = ntdll.NtQueryInformationFile(hFile, ctypes.byref(iosb), ctypes.byref(информация), ctypes.sizeof(информация), FileProcessIdsUsingFileInformation) pidList = info. 

Learn more

Только новые статьи

Введите свой e-mail

Видео-курс

Blender для новичков

Ваше имя:Ваш E-Mail: