Межплатформенное отслеживание доступа к файлам

Я хотел бы иметь возможность отслеживать чтение / запись файлов определенных вызовов программы. Никакой информации о реальных транзакциях не требуется, только имена файлов.

Есть ли кросс-платформенное решение для этого?
Каковы различные методы для конкретных платформ?
В Linux я знаю, что есть strace / ptrace (если есть более быстрые методы, которые тоже подойдут).
Я думаю, на Mac OS есть Ktrace.
А как насчет Windows?

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

Спасибо!

21.08.2008 19:16:51
Я также ищу ответы на этот вопрос. Я надеялся (как и вы), что смогу использовать ktrace в Mac OS, но системный вызов, похоже, был удален (или скрыт). Вам повезло с ktrace на Mac?
David Roundy 18.04.2015 21:19:36
3 ОТВЕТА

В Windows вы можете использовать инструмент командной строки Handle или GUI-версию Process Explorer, чтобы увидеть, какие файлы открыты для данного процесса.

Если вы ищете эту информацию в своей собственной программе, вы можете использовать набор IFS от Microsoft, чтобы написать фильтр файловой системы. Фильтр файловой системы покажет все операции файловой системы для всего процесса. Фильтры файловой системы используются в программном обеспечении AV для сканирования файлов перед их открытием или для сканирования вновь созданных файлов.

0
21.08.2008 20:32:31

Короткий ответ: нет. Существует множество платформо-зависимых решений, которые, вероятно, имеют схожие интерфейсы, но они не являются кроссплатформенными по своей природе, поскольку файловые системы, как правило, зависят от платформы.


Как мне сделать это хорошо на каждой платформе?

Опять же, это будет зависеть от платформы :) Для Windows, если вы хотите отслеживать чтение / запись в полете, вам, возможно, придется использовать IFS. Если вы просто хотите получать уведомления об изменениях, вы можете использовать ReadDirectoryChangesWили журнал изменений NTFS.

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

1
3.07.2012 14:52:15
Изменяет ли NTFS отчет журнала, какой процесс выполняет каждое изменение?
David Roundy 18.04.2015 17:53:21

Пока ваша программа запускает процессы, которые вы хотите отслеживать, вы можете написать отладчик, а затем вы будете получать уведомления каждый раз, когда процесс запускается или завершается. Когда процесс запускается, вы можете внедрить DLL, чтобы перехватить системные вызовы CreateFile для каждого отдельного процесса. Затем ловушка может использовать канал или сокет для сообщения об активности файла отладчику.

0
14.01.2010 06:42:42
Есть ли у вас какие-либо советы о том, как сделать это перехват от C?
David Roundy 18.04.2015 21:21:29
Горячий патч Google для DLL или что-то в этом роде. Ваш процесс отладчика может использовать CreateRemoteThread в отлаживаемом процессе для вызова LoadLibrary, который загружает вашу собственную DLL, которая становится частью этого процесса, и может использовать технику оперативного исправления для перехвата всех вызовов практически любой функции из системной DLL.
Emil 19.04.2015 22:56:42