c++ - 如何捕获文件创建和负责的调用者

标签 c++ winapi file debugging creation

我们正在使用第三方库来渲染 3d。在这个库中有一个“内存跟踪器”功能,可以跟踪库在执行期间分配和释放的所有内存。这是一个很好的功能,因为它有助于确定例如内存泄漏。

通过调用这个库中的某个函数,在进程的当前工作目录中生成一个日志文件。最近我注意到这个文件出现在几个不同的地方,所以我的第一个想法当然是始终将当前工作目录设置为我希望日志显示在其中的文件夹,这很好用。

然而,事实证明这个文件仍然在不同的地方创建,而上面提到的函数从未被程序调用过。因此,该文件必须由图书馆以某种方式在未经我同意的情况下创建。这个库的创建者说引擎从不在内部调用这个方法。

因此,为了证明他是错的(或者证明我自己是愚蠢的(虽然不会是第一次)),我需要一种方法来准确捕捉此文件的创建时间。 FindFirstChangeNotification() 不会这样做,因为这只会向我提供某些文件夹中发生了某些事情的信息。理想情况下,我希望(在进程中或进程外)在发生这种情况时进行拦截,并以某种方式注入(inject)进程异常(例如,让 WinDbg 捕获此异常),以便我通过调用堆栈获取所需的信息。

欢迎提出任何建议。

干杯!

最佳答案

你可以试试:

  1. 使用类似 FileMon 的工具或 Process Explorer ,他们可能足以追踪到它。
  2. 使用 Hook 库并将 CreateFile(或更多函数,如果需要)替换为您自己的函数。我对 Detours 有很好的体验,它有一些非常好的示例,您可以开箱即用。

关于c++ - 如何捕获文件创建和负责的调用者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/910459/

相关文章:

winapi - C++ MFC 从小部件 ID 添加组合框字符串项

c++ - 在 macOS 上编译 GLEW 和 GLUT?

c++ - std::string 在不应该的时候通过了 std::is_fundamental 检查 - 模板元编程

c# - const uint8* 的 C++ 到 C# 转换

c++ - 调试 .NET 应用程序创建的 COM 对象

c++ - 如何修复ListView中的错误?封装控件时无法选择任何项目

ruby - Watir 是否在 ruby​​ 1.9.1 下工作?

java - 只从文件中读取一些字符串并将其存储在java中的堆栈中

c - 我在读取文件的语法时遇到麻烦,请帮忙吗?

django - 让用户下载文件+ django