Я ищу способ определить все файлы, которые процесс открыл в Windows. Это отличается от многих (уже отвеченных) здесь вопросов, потому что мне нужно знать все файлы, которые открыл процесс, а не только те, которые он открыл, когда я их ищу. Таким образом, я избегаю пропусков файлов, которые были полностью загружены в память, а затем закрыты. Вот некоторые вещи, которые я пробовал, но они не сработали:

  • ProcExp и Handle by SysInternals (оба списка содержат только открытые файлы)
  • ProcMon от SysInternals (с фильтрами имени процесса и операциями ReadFile и WriteFile). Этот удивил меня. Почему бы это не сработало?

Мой тестовый пример - открытие текстового файла с флэш-накопителя с помощью Блокнота, поэтому я не ожидаю, что ProcExp или Handle сработают (поскольку Блокнот считывает все в память, а затем закрывает файл). ProcMon, похоже, должен работать, хотя. Фактически, когда я редактирую текстовый файл и сохраняю его, я вижу операцию WriteFile и путь к моему текстовому файлу. Единственные операции ReadFile, которые я вижу при открытии файла, это C:\Windows\Fonts\StaticCache.dat . Может просто мой конфиг фильтра неправильный? Или другой инструмент будет работать лучше для меня?

1 ответ1

1

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

  1. Добавьте фильтр, чтобы включить процесс, который вы хотите проверить
  2. В правой части верхней панели (которая находится чуть ниже "Файл", "Редактировать", "Событие" и т.д.) Расположены пять значков, четыре из которых должны выделяться по умолчанию. Отмените выбор всех из них, кроме "Показать активность файловой системы" (компьютер с увеличительным стеклом над ним). Теперь вы должны видеть только файлы, к которым обращается ваша программа, а не обычный набор ключей реестра.
  3. Чтобы отфильтровать ненужные библиотеки DLL и конфигурационные файлы, к которым он обычно обращается, выясните, в какой папке находится большинство из них (часто это C:\Windows), и добавьте фильтр, подобный следующему: 'Path' 'Contains' [your folder] 'Exclude'
  4. В качестве альтернативы шагу 3 добавьте фильтр, подобный этому, чтобы просто исключить dll: 'Path' 'Contains' '.dll' 'Exclude'

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .