Я хотел бы иметь возможность отслеживать чтение / запись файлов определенных вызовов программы. Никакой информации о реальных транзакциях не требуется, только имена файлов.
Есть ли кросс-платформенное решение для этого?
Каковы различные методы для конкретных платформ?
В Linux я знаю, что есть strace / ptrace (если есть более быстрые методы, которые тоже подойдут).
Я думаю, на Mac OS есть Ktrace.
А как насчет Windows?
Кроме того, было бы удивительно, если бы можно было блокировать (блокировать) доступ к файлам до более позднего времени.
Спасибо!
В Windows вы можете использовать инструмент командной строки Handle или GUI-версию Process Explorer, чтобы увидеть, какие файлы открыты для данного процесса.
Если вы ищете эту информацию в своей собственной программе, вы можете использовать набор IFS от Microsoft, чтобы написать фильтр файловой системы. Фильтр файловой системы покажет все операции файловой системы для всего процесса. Фильтры файловой системы используются в программном обеспечении AV для сканирования файлов перед их открытием или для сканирования вновь созданных файлов.
Короткий ответ: нет. Существует множество платформо-зависимых решений, которые, вероятно, имеют схожие интерфейсы, но они не являются кроссплатформенными по своей природе, поскольку файловые системы, как правило, зависят от платформы.
Как мне сделать это хорошо на каждой платформе?
Опять же, это будет зависеть от платформы :) Для Windows, если вы хотите отслеживать чтение / запись в полете, вам, возможно, придется использовать IFS. Если вы просто хотите получать уведомления об изменениях, вы можете использовать ReadDirectoryChangesW
или журнал изменений NTFS.
Я бы рекомендовал использовать журнал изменений NTFS только потому, что он более надежен.
Пока ваша программа запускает процессы, которые вы хотите отслеживать, вы можете написать отладчик, а затем вы будете получать уведомления каждый раз, когда процесс запускается или завершается. Когда процесс запускается, вы можете внедрить DLL, чтобы перехватить системные вызовы CreateFile для каждого отдельного процесса. Затем ловушка может использовать канал или сокет для сообщения об активности файла отладчику.