跟踪打开特定文件的进程
Tracing which process that has opened a particular file
在Windows的内核模式下,我能够拦截和监视在特定磁盘上执行的几乎所有操作。当一个文件出于任何目的被打开时,我会得到一个事件。
现在我想追踪是哪个应用程序打开了它。我认为这应该是可能的,但不知道如何做到。
我使用的是Windows Win32 API中的标准文件管理功能。
提前谢谢。
/Robert
Sysinternals Filemon(免费)做到了这一点,更好的是,他们描述了他们是如何做到的:
对于Windows 9x驱动程序,心脏的FileMon在虚拟设备中驱动程序,Filevxd.vxd。它是动态的已加载,并且在初始化时通过安装文件系统筛选器VxD服务,IFSMGR_InstallFileSystemApiHook,到将自身插入的调用链所有文件系统请求。在Windows上NT FileMon的核心是一个文件创建和将筛选器设备对象附着到目标文件系统设备对象soFileMon将看到所有IRP和针对驱动器的FastIO请求。当FileMon看到打开时,创建或它会更新内部用作映射的哈希表内部文件句柄和文件之间路径名。每当它看到呼叫时是基于句柄的,它会查找哈希表中的句柄以获取显示的全名。如果基于句柄的访问引用文件在FileMon启动之前打开,FileMon将无法在其哈希表,并将简单地呈现句柄的值。
-Adam
Sysinternals在做这件事和解释这件事方面做得很好,例如,这里仍然可以使用一些旧版本的源代码,并且代码有很好的文档记录(imho)。这也可能是一个良好的开端。
我会使用Sysinternals中的"handle.exe"应用程序。
或者,你真的在尝试用程序的方式来做这件事吗?
只需使用Win32 N.API从File句柄获取pid。这是15年来的常见问题解答。。。
- c++多进程编写一个唯一的文件
- 避免使用 boost::进程间::消息队列创建文件
- 从根权限进程创建可访问的文件
- Windows 将标准的 C 文件结构注入到正在运行的进程中
- gcc 找不到 -lgcc, g++.exe: 错误: 创建进程: 没有这样的文件或目录
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- 如何在 Linux 下使用 c++ 知道文件是否被其他进程使用?
- 多个线程/进程是否可以在不同步的情况下同时从/写入文件的非重叠区域?
- 如何检测哪些进程更改,重命名或创建文件?
- 如何:监视Windows中另一个进程的文件访问?
- 提升进程间共享内存删除、权限和输出文件
- 使用文件锁定的进程之间的条件变量
- 当多个进程尝试同时替换同一文件时,Linux 如何处理这种情况?
- COM 客户端连接 COM 服务器所需的文件是什么(进程外方案)
- 如何在我的进程中运行的二进制文件中注册操作和内核
- 为什么我的 Redhat 服务器上的 QuickFIX 进程没有将其核心文件写入应有的位置?
- Growing Boost.使用单个写入器的进程间内存映射文件
- C++ Mingw32 创建进程() 失败,错误代码 2:系统找不到指定的文件
- 如何从安卓原生二进制文件运行单独的进程
- Python 子进程.Popen 在 g++ 中编译,自动添加.cpp文件