2008-10-23 103 views
3

从Windows的内核模式中,我可以截取和监控几乎在特定磁盘上执行的所有操作。当为任何目的打开文件时,我会得到一个事件。追踪哪个进程打开了一个特定的文件

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

我在Windows Win32 API中使用标准文件管理功能。

在此先感谢。

/Robert

回答

-3

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

+0

-1这里几乎没有任何信息。 – 2011-10-27 03:26:37

0

我会使用Sysinternals提供的“handle.exe”应用程序。

或者,你是否真的试图做到这一点编程?

+0

是的,编程方式,因此“在win32 API中的文件管理功能”和“事件” – sharkin 2008-10-23 21:39:15

3

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

对于Windows 9x的驱动程序,心脏的FileMon的 是虚拟设备驱动程序 ,Filevxd.vxd。它是动态加载 ,并在其初始化它 安装通过 的VxD服务, IFSMGR_InstallFileSystemApiHook一个文件系统过滤器,以 将自身插入到的 调用链中的所有文件系统请求。在Windows NT FileMon之的心脏是创建和 附加过滤装置对象 目标文件系统设备中的文件 系统驱动程序对象,以便 该FileMon的会看到所有的IRP和被引导至硬盘 FastIO请求。 当FileMon发现打开,创建或关闭调用时,它会更新内部 散列表,该内部散列表充当内部文件句柄和文件 之间的映射 路径名称。每当它看到基于句柄的调用 时,它将在哈希表中查找 句柄以获取 全名以供显示。如果 基于句柄的访问引用FileMon启动之前打开的文件 ,FileMon 将无法​​找到其 散列表中的映射,而只是简单地显示 句柄的值。

- 亚当

1

Sysinternals的在做这件事,并解释它做了一个好工作,那的旧版本的一些源代码仍然可以here例如,代码是有据可查的(恕我直言)这也可能是一个好的开始。

相关问题