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