阅读:2259回复:5
文件重定向,运行不了需要Winsxs支持的dll的Windows应用程序
我截获了各个文件操作函数,实现了文件重定向操作。目前可以work了。被重定向后的目录中的文件,例如a.txt, xx.chm,一些不需要Microsoft.Windows.Common-Controls的控制台可执行文件等文件或者目录都可以访问和执行。但是如果是可执行文件,并且使用了winsxs,(例如计算器, Winrar.exe等)则会报Resolve Partial Assembly 为Microsoft.Windows.Common-Controls失败,系统找不到指定的路径。Debug了很久都没有找到问题。
请牛人指点一二,大概是哪个文件函数没有处理好?我现在的做法是: NtOpenFile/NtCreateFile original_file redirected_file = 从源文件计算重定向后的文件路径 调用NtOpenFile(redirected_file) 主要是就这种类型的可执行文件不能work, 完全没想法。 |
|
沙发#
发布于:2009-10-03 11:30
是在64位下运行32位程序吗?
|
|
|
板凳#
发布于:2009-10-07 10:15
32位 windows xp. sp1
|
|
地板#
发布于:2009-10-09 18:24
是不是重定向的路径不对?winsxs的目录结构比较复杂.而且在vista及以后平台,也不允许直接改写
|
|
|
地下室#
发布于:2009-10-12 17:31
传统的文件重定向大概怎么做的呢?我看过微软的一篇文章,它只是将caller提供的文件路径的buffer修改掉。但是这么做以后,对于QueryFileInfo之类的函数,还是需要做处理的,因为用户需要得到之前的文件名称。
winsxs的路径确实复杂,但是就这个目录找不到。我看过输出的文件路径的log,文件名称似乎是对的。 |
|
5楼#
发布于:2009-10-13 09:10
还有一种可能就是,它是用fastio打开的文件,你要处理fastio把它禁掉,然后让它强制下发irp操作才行。reparse操作只对irp有效,对fastio 无效
|
|
|