【问题标题】:Tracing which process that has opened a particular file跟踪打开特定文件的进程
【发布时间】:2010-09-18 21:28:18
【问题描述】:

在 Windows 的内核模式下,我几乎可以拦截和监控在特定磁盘上执行的所有操作。当出于任何目的打开文件时,我会收到一个事件。

现在我想追踪打开它的应用程序。我认为这应该是可能的,但不知道如何。

我正在使用 Windows Win32 API 中的标准文件管理功能。

提前致谢。

/罗伯特

【问题讨论】:

    标签: c++ winapi file process-management


    【解决方案1】:

    Sysinternals Filemon(免费)这样做,但更好的是他们描述了他们是如何做到的:

    对于 Windows 9x 驱动程序,心脏 FileMon 在虚拟设备中 驱动程序,Filevxd.vxd。它是动态的 加载,并在其初始化中 通过安装文件系统过滤器 VxD 服务, IFSMGR_InstallFileSystemApiHook,到 将自己插入到调用链中 所有文件系统请求。在 Windows 上 NT FileMon 的核心是一个文件 创建和创建系统驱动程序 将过滤器设备对象附加到 目标文件系统设备对象,所以 FileMon 将看到所有 IRP 和 指向驱动器的 FastIO 请求。 当 FileMon 看到打开时,创建或 近距离通话,它更新了一个内部 用作映射的哈希表 内部文件句柄和文件之间 路径名称。每当它看到来电 基于句柄的,它查找 哈希表中的句柄来获取 显示的全称。如果一个 基于句柄的访问引用文件 在 FileMon 启动之前打开,FileMon 将无法在其中找到映射 哈希表,并将简单地呈现 取而代之的是句柄的值。

    -亚当

    【讨论】:

      【解决方案2】:

      Sysinternals 在执行和解释方面做得非常好,例如,旧版本的一些源代码仍然可用here,并且代码有据可查(恕我直言)。这也可能是一个好的开始。

      【讨论】:

        【解决方案3】:

        我会使用 Sysinternals 的“handle.exe”应用程序。

        或者,您实际上是在尝试以编程方式执行此操作吗?

        【讨论】:

        • 是的,以编程方式,因此是“win32 api 中的文件管理功能”和“事件”
        【解决方案4】:

        只需使用 Win32 N.API 从文件句柄中获取 pid。 这是 15 年的常见问题解答...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-14
          • 1970-01-01
          • 2017-01-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          相关资源
          最近更新 更多