拦截和修改文件系统调用 - Windows

时间:2013-07-02 03:23:37

标签: .net windows file system minifilter

简短版本:有没有办法“拦截”Windows(XP或7)文件系统调用以打开文件并用不同的文件名替换所述调用?

长版本:我正在尝试帮助客户从硬盘损坏中恢复。有问题的计算机位于自助服务终端中,只需与网络摄像头一起播放两个Flash文件。它由MDM Zinc编译的.exe控制。我有两个Flash文件和.exe的副本。

问题是,只有一个Flash文件打开。在猛烈敲击之后,我终于看到了通过Systernals Process Monitor发生的事情。两个.flv文件都在同一个文件夹中。我可以在Process Mon中非常清楚地看到.exe将工作调用为c:\ somedirectory \ anotherdirectory \ file1.flv。非工作的虽然APPARENTLY有一个错字,因为它在路径中并排有两个反斜杠:c:\ somedirectory \ \ anotherdirectory \ file2.flv

我被告知这是唯一可用的.​​exe版本,并且创建它的公司已经停业,所以我拥有的就是我将要得到的全部内容。如果它确实是一个错字,我无法想象它是如何工作的。我不得不认为那里有一个不同的版本。当然,如果它真的是.exe中的拼写错误,它可能是最糟糕的字符是另一个\因为它在目录或文件名中无效而且我不能简单地将有问题的文件移动到新的路径。 (今天发现你实际上可以在Windows中创建一个看似空白的名称(ALT-255)的目录,但这是一个长镜头,但没有用。)

我的编程技巧并不是非常强大,但今天的研究有点让我认为minifilter或API挂钩可能是一个答案?我已经尝试反编译.exe以及在HEX编辑器中弹出它。不幸的是,有问题的路径似乎不是一个可供编辑的字符串。如果其中任何一个都是有效的选择,我真的很感激(正确的)推动正确的方向。如果你能想到我可能会尝试的任何其他事情,那我就完全没有想法了。

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

您应该可以使用EasyHook库来完成此任务。有关EasyHook http://www.codeproject.com/Articles/27637/EasyHook-The-reinvention-of-Windows-API-hooking的文章特别包含了如何覆盖CreateFile的示例,这是.NET框架用于打开文件的方法。