2013-07-02 48 views
2

简版:有没有办法'拦截'Windows(XP或7)文件系统调用来打开文件并用不同的文件名称替换所述的调用?拦截和修改文件系统调用 - Windows

长版本:我试图帮助客户从HDD损坏中恢复。有问题的电脑在一个自助服务终端中,只需要将两个Flash文件与一个网络摄像头结合使用。它由MDM Zinc编译的.exe控制。我有两个Flash文件和.exe的副本。

问题是,只有其中一个Flash文件打开。经过很长时间的轰炸后,我终于看到了通过Systernals Process Monitor发生的事情。两个.flv文件都在同一个文件夹中。在Process Mon中,我可以清楚地看到.exe将工作文件称为c:\ somedirectory \ anotherdirectory \ file1.flv。非工作的一个虽然显然有一个错字,它有两个反斜杠并排在路径中:c:\ somedirectory \ \ anotherdirectory \ file2.flv

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

我的编程技巧并不令人难以置信,但今天的研究让我觉得微过滤器或API钩可能是一个答案?我已经尝试反编译.exe以及在HEX编辑器中弹出它,并且不幸的是,有问题的路径似乎不是一个易于编辑的字符串。如果其中任何一个都是有效的选择,我会非常感激(朝着正确的方向)推进。如果你能想到我可能会尝试的其他东西,那么我几乎没有想法。

谢谢你的时间!

回答

1

您应该可以使用EasyHook库来实现此目的。有关EasyHook的文章http://www.codeproject.com/Articles/27637/EasyHook-The-reinvention-of-Windows-API-hooking特别包含一个示例,说明如何覆盖.NET框架用于打开文件的方法CreateFile

+1

谢谢!从表面上看,这看起来非常有希望......我现在要更仔细地阅读它。 –

+0

打开exe并找到该路径。 然后改变它以匹配你想要和保存的内容。 –

+0

我刚刚运行了一些测试代码与fopen_s(...);和CreateFile “\\\\”在路径中不会中断任何一个调用。 您可能正在寻找其他问题... –