C++ 跟踪打开特定文件的进程

C++ 跟踪打开特定文件的进程,c++,winapi,file,process-management,C++,Winapi,File,Process Management,在Windows的内核模式下,我能够截获并监控在特定磁盘上执行的几乎所有操作。当出于任何目的打开文件时,我都会收到一个事件 现在我想跟踪打开它的应用程序。我认为这应该是可能的,但不知道怎么做 我正在使用Windows Win32 API中的标准文件管理函数 提前谢谢 /Robert我会使用Sysinternals中的“handle.exe”应用程序 或者,你真的想通过编程来实现这一点吗 (免费)做到了这一点,更好的是,他们描述了他们是如何做到的: 对于Windows 9x驱动程序,心脏 在虚拟设

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

现在我想跟踪打开它的应用程序。我认为这应该是可能的,但不知道怎么做

我正在使用Windows Win32 API中的标准文件管理函数

提前谢谢

/Robert

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

或者,你真的想通过编程来实现这一点吗

(免费)做到了这一点,更好的是,他们描述了他们是如何做到的:

对于Windows 9x驱动程序,心脏 在虚拟设备中有个文件名 驱动程序,文件vxd.vxd。它是动态的 加载,并在其初始化中 通过安装文件系统筛选器 VxD服务, IFSMGR\u安装文件系统PIHOOK,至 将自身插入到的调用链中 所有文件系统请求。在窗户上 FileMon的核心是一个文件 系统驱动程序,用于创建和 将筛选设备对象附加到 目标文件系统设备对象 FileMon将看到所有IRP和 针对驱动器的FastIO请求。 当FileMon看到打开的 关闭呼叫,它将更新内部 用作映射的哈希表 在内部文件句柄和文件句柄之间 路径名。每当它看到电话 是基于句柄的,它会查找 在哈希表中的句柄以获取 显示的全名。如果 基于句柄的访问引用文件 在FileMon启动之前打开,FileMon 将无法在其中找到映射 哈希表,并将简单地显示 而不是句柄的值


-Adam

Sysinternals在做这件事和解释它方面做得非常好,例如,一些旧版本的源代码仍然可用,并且代码有很好的文档记录(imho)。这可能也是一个很好的开始。

只需使用Win32 N.API从文件句柄获取pid即可。 这是一个长达15年的常见问题解答…

是的,以编程方式,因此“win32 api中的文件管理功能”和“事件”