除了createfile和openfile之外,任何windows apis都可以获得文件句柄?

我试图窥探应用程序正在写入的日志文件

我已经成功地将创build文件与来自MSR的detours库挂钩,但是createfile似乎永远不会用文件调用,我对snooping感兴趣。 我也试着用相同的结果钩住openfile。

我不是一个经验丰富的Windows / c + +程序员(或者甚至是一个有经验的程序员),所以我最初的两个想法是在我挂钩apis之前调用createfile,或者有一些其他的API来创build文件/获取句柄。

编辑:感谢两个伟大的答复。 我会upvote codingthewheel的回复,因为它是内容丰富,但我没有足够的代表:(

你可以使用Sysinternal的FileMon 。 这是一个很好的监视器,可以告诉你究竟哪个文件相关的系统调用正在进行,参数是什么。

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

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

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

可以创建一个文件而不用触及CreateFile API,但是我可以问一下你使用的是什么DLL注入方法 ? 如果您使用的是Windows Hooks之类的东西,那么在目标应用程序初始化之后的某个时候,您的DLL将不会被安装,您将错过早期的CreateFile调用。 而如果你使用类似DetourCreateProcessWithDll的东西,你的CreateFile钩子可以在运行任何应用程序启动代码之前安装。

根据我的经验,创建/打开文件的99.9%会导致对CreateFile的调用,包括通过C和C ++库,第三方库等打开的文件。也许有一些未记录的DDK函数不能通过CreateFile进行路由,一个典型的日志文件,我怀疑它。

来自sysinternals的进程监视器也可以提供帮助。