关于文件系统:跨平台文件访问跟踪

关于文件系统:跨平台文件访问跟踪

Cross platform file-access tracking

我希望能够跟踪特定程序调用的文件读/写。 不需要有关实际事务的信息,只需涉及的文件名。

是否有跨平台的解决方案?
有哪些特定于平台的方法?
在Linux上,我知道有strace / ptrace(如果也有比较好的方法)。
我认为在Mac OS上有ktrace。
Windows呢?

另外,如果可以阻止(延迟)文件访问直到以后,那将是惊人的。

谢谢!


最简洁的答案是不。有许多特定于平台的解决方案都可能具有相似的接口,但是由于文件系统往往是特定于平台的,因此它们并不是固有的跨平台的。

How do I do it well on each platform?

同样,这将取决于平台:)对于Windows,如果要跟踪飞行中的读写,则可能必须使用IFS。如果只想通知更改,则可以使用ReadDirectoryChangesW或NTFS更改日志。

我建议仅使用NTFS更改日志,因为它往往更可靠。


只要程序启动要监视的进程,就可以编写调试器,然后在每次进程启动或退出时都会收到通知。进程启动时,您可以注入DLL来挂接每个单独进程的CreateFile系统调用。然后,挂钩可以使用管道或套接字将文件活动报告给调试器。


在Windows上,您可以使用命令行工具Handle或GUI版本的Process Explorer来查看给定进程打开了哪些文件。

如果您要在自己的程序中获取此信息,则可以使用Microsoft的IFS工具包编写文件系统过滤器。文件系统过滤器将显示所有进程的所有文件系统操作。文件系统过滤器在AV软件中用于在打开文件之前进行扫描或扫描新创建的文件。


推荐阅读