跨平台文件访问跟踪

3
我希望能够追踪特定程序调用的文件读写情况。不需要有关实际交易的任何信息,只需涉及的文件名。
是否有跨平台的解决方案?各种平台特定方法是什么?在Linux上,我知道有strace / ptrace(如果有更快的方法也很好)。我认为在mac os上有ktrace。那Windows呢?
此外,如果可以阻止(暂停)文件访问直到稍后某个时间,那将是惊人的。
谢谢!

我也在寻找这个问题的答案。我曾经希望(和你一样)能够在Mac OS上使用ktrace,但是系统调用似乎已被删除(或隐藏)。你在Mac上使用ktrace有什么好的方法吗? - David Roundy
3个回答

1
短暂的回答是不行的。虽然有许多特定于平台的解决方案,它们可能具有类似的接口,但它们并不是跨平台的,因为文件系统往往是特定于平台的。
每个平台都有不同的方法,具体要看平台是什么。对于Windows平台,如果你想追踪正在进行的读写操作,你可能需要使用IFS。如果你只是想得到文件变化的通知,你可以使用ReadDirectoryChangesW或NTFS更改日志。我建议使用NTFS更改日志,因为它更可靠。

1
NTFS更改日志记录哪个进程进行了每个更改吗? - David Roundy

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

你有任何关于如何从C语言进行钩子操作的提示吗? - David Roundy
谷歌 DLL 热补丁或类似内容。您的调试器进程可以使用 CreateRemoteThread 进入正在被调试的进程,以调用 LoadLibrary 加载您自己的 DLL,该 DLL 将成为该进程的一部分,并使用热补丁技术拦截来自系统 DLL 的几乎任何函数的所有调用。 - Emil

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接