截取并修改文件系统调用 – Windows

短版本:有没有办法“截获”Windows(XP或7)文件系统调用来打开文件,并用不同的文件名replace所述的调用?

长版本:我试图帮助客户从硬盘损坏恢复。 有问题的电脑是在一个亭子,只是播​​放两个Flash文件结合摄像头。 它由MDM Zinc编译的.exe文件控制。 我有两个Flash文件和一个.exe的副本。

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

我被告知,这是可用的.exe的唯一版本,创build它的公司已经无法正常工作,所以我得到的就是我所能得到的。 如果确实是一个错字,我无法想象它是如何工作的。 我不得不认为那里有一个不同的版本。 当然,如果确实是.exe中的一个input错误,那么它可能是最差的字符是另一个字符,因为这在目录或文件名中是无效的,我不能简单地把这个文件移动到一个新的path。 (今天发现,你实际上可以在Windows中创build一个名称似乎空白的目录(ALT – 255),但是这是一个远投不起作用)。

我的编程技能并不是非常强大,但是今天的研究让我认为微型filter或API挂钩可能是一个答案? 我已经尝试反编译.exe以及在HEX编辑器中popup它打开,不幸的是,有问题的path似乎不是一个易于编辑的string。 如果其中任何一个都是有效的select,我真的很感激(朝着正确的方向)。 如果你能想到其他我可能会尝试的东西,我几乎没有想法。

感谢您的时间!

你应该可以使用EasyHook库来实现这一点。 关于EasyHook的文章http://www.codeproject.com/Articles/27637/EasyHook-The-reinvention-of-Windows-API-hooking特别包含了一个如何重写CreateFile的例子,.NET Framework使用的方法打开一个文件。