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

是否有跨平台解决方案?
什么是各种平台特定方法?
在Linux上,我知道有strace / ptrace(如果有更好的方法那么好)。
我认为在Mac OS上有ktrace。
Windows怎么样?

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

谢谢!

===============>>#1 票数:1

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


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

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

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

===============>>#2 票数:0

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

===============>>#3 票数:0

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

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

  ask by mgsloan translate from so

未解决问题?本站智能推荐: