В Windows, как я могу отслеживать в C, какие файлы дочерний процесс читает и пишет?
Моя цель - определить при выполнении команды, какие именно файлы она читает и пишет. В linux я могу сделать это, используя ptrace (с работой, сродни тому, что делает strace), а на freebsd и MacOS я могу сделать это с помощью команды ktrace system. Что бы вы использовали для получения этой информации в окнах?
Мои исследования пока показывают, что я либо использую интерфейс отладчика (по-разному, как и ptrace), или, возможно, ETW. Третьей альтернативой является вставка DLL для перехвата системных вызовов по мере их создания. К сожалению, у меня нет опыта догадываться о том, насколько сложным будет каждый из этих подходов.
Любые предложения?
Ответы
Ответ 1
Как вы предположили, это довольно простая задача для решения с помощью API Hooking с вложением DLL.
Это довольно хорошая статья о приложении: http://www.codeproject.com/Articles/2082/API-hooking-revealed
Я считаю, что вы можете найти более свежие статьи о проблеме.
Однако вам, вероятно, нужно использовать С++ для реализации такой утилиты. Кстати, программы могут отключить инъекцию dll, например, я не смог использовать этот подход в пробной версии Photoshop.
Итак, вы можете проверить, можете ли вы вставлять dll в процесс, который вы хотите, с существующим решением, прежде чем начинать писать свои собственные.
Удачи.
Ответ 2
К сожалению, кажется, что нет простого способа перехвата действий на уровне файлов в Windows.
Вот несколько советов:
- вы можете попытаться использовать FileMon из sysinternals, если этого достаточно для ваших нужд, или попытайтесь посмотреть на источник инструмента.
- вы могли бы использовать коммерческое программное обеспечение, например Detours - будьте осторожны, я никогда не использовал это сам, и я не уверен, что он действительно встречается ваши потребности
Если вы хотите лучшего понимания и не пугаетесь при этом вручную, способ перехвата файла IO Windows использует Драйвер фильтра файловой системы. Фактически, есть FilterManager, встроенный в систему Windows, который может перенаправлять все вызовы файловой системы на мини-фильтры.
Чтобы создать его, интерфейс с системой предоставляется фильтром FilterManager, и у вас есть (...), чтобы закодировать и установить минифильтр, который выполняет фактическую фильтрацию, - остерегайтесь снова никогда не проверять, что...
Ответ 3
Пожалуйста, взгляните на следующую статью:
http://www.codeproject.com/Articles/950/CDirectoryChangeWatcher-ReadDirectoryChangesW-all
Это очень старый, но запущенный способ просмотра изменений каталога.
Ответ 4
Microsoft владеет набором инструментов под названием SysInternals. Существует программа под названием Process Monitor, которая покажет вам все обращения к файлам для определенного процесса. Это очень вероятно, что вы хотите.
Ответ 5
Проверьте эту персоничную ссылку на свой вопрос...
Это может помочь вам
Есть ли что-то вроде linux ptrace syscall в Windows?
Также, если вы используете более низкие версии, такие как XP, вы должны проверить эту ссылку.
https://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
Дайте мне знать, если это не поможет.
И я бы хотел, чтобы вы это выяснили.
Контроль определенных системных вызовов, выполняемых процессом в Windows