我正在尝试监听应用程序正在写入的日志文件。

我已成功将 createfile 与 MSR 的 detours 库挂钩,但 createfile 似乎从未被我感兴趣的文件调用。我也尝试过挂钩 openfile 并得到相同的结果。

我不是一个经验丰富的 Windows/C++ 程序员(甚至不是一个经验丰富的程序员),所以我最初的两个想法是应用程序在挂接 api 之前调用 createfile,或者有一些其他 api 用于创建文件/获取它们的句柄。

编辑:感谢两位的精彩回复。我会投票支持codingthewheel的回复,因为它内容丰富,但我没有足够的代表:(

有帮助吗?

解决方案

您可以使用 Sysinternal 的 文件星期一. 。这是一个出色的监视器,可以准确地告诉您要进行哪些文件相关的系统调用以及哪些参数。

我认为这种方法比挂钩 API 调用容易得多,而且侵入性也小得多。

其他提示

这是一个可能有用的链接:

使用 C# 和 C++ 进行游击式文件监控

可以在不接触 CreateFile API 的情况下创建文件,但我可以问一下吗 你使用什么DLL注入方法?如果您使用 Windows Hooks 之类的东西,您的 DLL 直到目标应用程序初始化后才会安装,并且您将错过对 CreateFile 的早期调用。然而,如果您使用 DetourCreateProcessWithDll 之类的东西,则可以在任何应用程序启动代码运行之前安装 CreateFile 挂钩。

根据我的经验,99.9% 创建/打开的文件都会调用 CreateFile,包括通过 C 和 C++ 库、第三方库等打开的文件。也许有一些未记录的 DDK 函数不通过 CreateFile 路由,但对于典型的日志文件,我对此表示怀疑。

过程监控器 来自 sysinternals 也可以提供帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top