HOWTO:通过Windows中的另一个进程监视文件访问?

我正在处理图像文件的程序。 我遇到的问题是一些图像非常大,我不知道什么时候复制过程完成。 现在代码是用C#编写的,正在使用FileSystemWatcher类来监视这些文件。 唯一的问题是当另一个进程与文件完成时没有事件。

当前的逻辑是观察创build和改变的事件,并等待5秒钟,希望到那时复制过程完成。 虽然这在我的开发机器上工作,不幸的是客户报告整个过程的问题。

几年前,当我编写这段代码时,我看到在较低的层次上,我认为它是DDK SDK的一部分,或者别的什么东西,可以find更多关于另一个程序如何访问文件的信息。

任何人都可以谈论这一点,并指出我在正确的方向吗? 我希望它是C ++代码,而不是C#代码。


回答以下问题:

问题是其他进程正在将图像复制到我的程序正在监视的目录中。 一旦图像完全复制,我的程序需要尽快开始处理图像。 问题是许多图像,有时会有数百个图像被同时复制。 由于每个图像都需要尽可能快地处理,所以系统需要尽快知道图像被完全复制并且可以被处理。

我完全知道有没有办法通过WinSDK来做我想做的事情,但我99.9%肯定它可以通过WinDDK,也许我有错的名字,我谷歌search,并得到“Windows驱动程序工具包(WDK )”。 我非常确定,SysInternals通过使用WDK级别的函数来取消所有的酷招。

你可能感兴趣的是sys内部procmon工具。 除了其他功能,它监视文件访问给你很多的细节。 不幸的是源代码不可用,但是这里是关于以前版本 (filemon)的一个线索,由与您类似的问题的人启动。

另外你也许想看看开源的选择 ,它可能有你正在寻找的代码。

或者,您可以使用ProcMon作为监视工具并解析其输出。 使用内置的过滤器功能,您将能够将日志文件条目限制到特定的文件夹和文件访问事件的类型/数据。