我有一个用 C 语言编写的小型命令行应用程序,它充当其他程序的包装器/启动器(想想:xargs)。该应用程序是为在 FreeBSD/Linux(通过 fork()/exec())和 Windows(CreateProcess())上编译而编写的。除了能够拦截、注入或以其他方式操作子应用程序的命令行参数之外,我想知道是否有一种简单的方法可以拦截子程序的文件系统活动(或者它的子程序,等等)。我主要对读取或写入访问的文件名感兴趣,而不是所述文件的内容,并且希望拦截尽可能轻量级。
在谷歌搜索上面的一些相关关键字时,似乎在 Win32 中有很多方法可以做到这一点。从文件系统过滤器驱动程序到篡改 PE 导入表头。这些似乎都不是微不足道的,或者我可以在我的包装程序的可执行文件中独立包含的东西(例如,大多数都需要额外的 DLL 或驱动程序文件以及主可执行文件。)此外,如果可能的话,我希望它能够在 Windows XP 到 7 上工作,而无需破解 UAC 或其他平台增量。这是我的子进程,所以我认为我应该能够安全地监控它的活动:)
在 Linux 上,有 inotify(),但它监视一般文件系统访问,而不只考虑我的子进程/es。FreeBSD 的 kqueue() 也是如此。在 SMP 情况下,这些情况也会出现问题,其中包装器的多个实例可能正在运行不同的程序,并且每个实例都需要消除它们自己子文件系统活动的歧义。
我当然会感谢 SO 社区可能必须提供的任何建议。