从Windows中的内核模式我能够拦截和监控几乎所有在特定磁盘上执行的操作。当我为任何目的打开文件时,我会收到一个事件。
现在我想跟踪打开它的应用程序。我认为这应该是可能的,但不知道如何。
我正在使用Windows Win32 API中的标准文件管理功能。
提前致谢。
/罗伯特
答案 0 :(得分:3)
Sysinternals Filemon(免费)做到这一点,更好的是他们描述了他们是如何做到的:
对于Windows 9x驱动程序,心脏 FileMon是在虚拟设备中 驱动程序,Filevxd.vxd。它是动态的 加载,并在其初始化它 通过安装文件系统过滤器 VxD服务, IFSMGR_InstallFileSystemApiHook,to 将自己插入到调用链中 所有文件系统请求。在Windows上 NT FileMon的核心是一个文件 创建和的系统驱动程序 将过滤器设备对象附加到 目标文件系统设备对象 FileMon将看到所有IRP和 针对驱动器的FastIO请求。 当FileMon看到打开,创建或 关闭电话,它更新内部 用作映射的哈希表 内部文件句柄和文件之间 路径名称。每当看到电话时 它是基于句柄的,它查找了 在哈希表中处理以获取 显示的全名。如果一个 基于句柄的访问引用文件 在FileMon启动之前打开,FileMon 将无法在其中找到映射 哈希表,只会呈现 处理价值而不是。
- 亚当
答案 1 :(得分:1)
Sysinternals做得很好并且解释它,例如旧版本的一些源代码仍然可用here,并且代码记录良好(imho)。这也是一个好的开始。
答案 2 :(得分:0)
我会使用Sysinternals的“handle.exe”应用程序。
或者,您是否真的尝试过这样做?
答案 3 :(得分:-3)
只需使用Win32 N.API从File句柄中获取pid。 这是15年的常见问题解答......