3

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

有没有跨平台的解决方案?
各种平台特定的方法是什么?
在 Linux 上,我知道有 strace/ptrace(如果有更快的方法也很好)。
我认为在 mac os 上有 ktrace。
窗户呢?

此外,如果可以阻止(停止)文件访问直到稍后的某个时间,那将是惊人的。

谢谢!

4

3 回答 3

1

最简洁的答案是不。有很多特定于平台的解决方案都可能具有相似的接口,但它们本质上不是跨平台的,因为文件系统往往是特定于平台的。


我如何在每个平台上做得很好?

同样,这将取决于平台 :) 对于 Windows,如果您想跟踪运行中的读/写,您可能必须使用 IFS。如果您只想获得更改通知,您可以使用ReadDirectoryChangesWNTFS 更改日志。

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

于 2008-08-21T21:47:59.453 回答
0

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

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

于 2008-08-21T20:32:31.303 回答
0

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

于 2010-01-14T06:42:42.957 回答