我希望能够跟踪特定程序调用的文件读/写。不需要有关实际交易的信息,只需要涉及的文件名。
这是否有跨平台解决方案?
什么是各种平台特定方法?
在Linux上,我知道有strace / ptrace(如果有更好的方法那么好)。我想在mac os上有ktrace。
那Windows呢?
此外,如果能够阻止(暂停)文件访问直到稍后的时间,那将是惊人的。
谢谢!
答案 0 :(得分:1)
简短的回答是否定的。有许多平台特定的解决方案都可能具有类似的接口,但它们本身并不是跨平台的,因为文件系统往往是特定于平台的。
我如何在每个平台上做得好?
同样,它将取决于平台:)对于Windows,如果您想要跟踪飞行中的读/写,您可能必须使用IFS。如果您只是希望收到有关更改的通知,可以使用ReadDirectoryChangesW
或NTFS更改日志。
我建议仅使用NTFS更改日志,因为它更可靠。
答案 1 :(得分:0)
在Windows上,您可以使用命令行工具Handle或GUI版本Process Explorer查看给定进程已打开的文件。
如果您正在寻找在自己的程序中获取此信息,可以使用Microsoft的IFS kit编写文件系统过滤器。文件系统过滤器将显示所有进程的所有文件系统操作。文件系统过滤器在AV软件中用于在文件打开之前扫描或扫描新创建的文件。
答案 2 :(得分:0)
只要您的程序启动您要监视的进程,您就可以编写调试器,然后每次进程启动或退出时都会收到通知。当进程启动时,您可以注入一个DLL来挂钩每个进程的CreateFile系统调用。然后,钩子可以使用管道或套接字向调试器报告文件活动。