【发布时间】:2010-09-18 21:28:18
【问题描述】:
在 Windows 的内核模式下,我几乎可以拦截和监控在特定磁盘上执行的所有操作。当出于任何目的打开文件时,我会收到一个事件。
现在我想追踪打开它的应用程序。我认为这应该是可能的,但不知道如何。
我正在使用 Windows Win32 API 中的标准文件管理功能。
提前致谢。
/罗伯特
【问题讨论】:
标签: c++ winapi file process-management
在 Windows 的内核模式下,我几乎可以拦截和监控在特定磁盘上执行的所有操作。当出于任何目的打开文件时,我会收到一个事件。
现在我想追踪打开它的应用程序。我认为这应该是可能的,但不知道如何。
我正在使用 Windows Win32 API 中的标准文件管理功能。
提前致谢。
/罗伯特
【问题讨论】:
标签: c++ winapi file process-management
Sysinternals Filemon(免费)这样做,但更好的是他们描述了他们是如何做到的:
对于 Windows 9x 驱动程序,心脏 FileMon 在虚拟设备中 驱动程序,Filevxd.vxd。它是动态的 加载,并在其初始化中 通过安装文件系统过滤器 VxD 服务, IFSMGR_InstallFileSystemApiHook,到 将自己插入到调用链中 所有文件系统请求。在 Windows 上 NT FileMon 的核心是一个文件 创建和创建系统驱动程序 将过滤器设备对象附加到 目标文件系统设备对象,所以 FileMon 将看到所有 IRP 和 指向驱动器的 FastIO 请求。 当 FileMon 看到打开时,创建或 近距离通话,它更新了一个内部 用作映射的哈希表 内部文件句柄和文件之间 路径名称。每当它看到来电 基于句柄的,它查找 哈希表中的句柄来获取 显示的全称。如果一个 基于句柄的访问引用文件 在 FileMon 启动之前打开,FileMon 将无法在其中找到映射 哈希表,并将简单地呈现 取而代之的是句柄的值。
-亚当
【讨论】:
Sysinternals 在执行和解释方面做得非常好,例如,旧版本的一些源代码仍然可用here,并且代码有据可查(恕我直言)。这也可能是一个好的开始。
【讨论】:
我会使用 Sysinternals 的“handle.exe”应用程序。
或者,您实际上是在尝试以编程方式执行此操作吗?
【讨论】:
只需使用 Win32 N.API 从文件句柄中获取 pid。 这是 15 年的常见问题解答...
【讨论】: