首页
社区
课程
招聘
[求助]SHFileOperation函数不会重定向
发表于: 2015-2-2 09:25 3615

[求助]SHFileOperation函数不会重定向

2015-2-2 09:25
3615
今天调试NSIS安装文件时碰到一个问题,32位的安装程序在64位系统上跑(Win7 64 bit)
安装流程中,拷贝文件,将能将文件拷贝到 c:\windows\system32\drivers下。
卸载流程中,删除文件时却无法删除该目录下的特定文件,而是删除c:\windows\syswow64\drivers下的文件。
初步看起来,应该是文件系统重定向的问题。

调试发现,删除文件时,调用DeleteFileA API。
而拷贝文件时调用的是 SHFileOperation,然后调用CreateFileA 接口。

首先想到一个问题:
(1)文件系统重定向机制的路径转换是在用户态还是内核态进行的?(我尝试找了些资料,单依然没有明确想法)

猜测安装文件在调用SHFileOperation之前,先关闭了文件系统重定向。设置断点:
bu kernel32!Wow64DisableFsRedirection
bu kernel32!Wow64RevertFsRedirection
发现没有相关操作,那么,如果有关闭重定向操作,应该是在SHFileOperation内进行。但是调试时也没有发现。

由此想请教第二个问题:
(2)SHFileOperation接口是如何避免文件系统重定向的?

请教各位,进一步验证的思路,或者提供相关信息,谢谢。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 16468
活跃值: (2493)
能力值: ( LV9,RANK:147 )
在线值:
发帖
回帖
粉丝
2
SHFileOperation没有关闭的操作吧.帮你顶一下,等待楼下回复.我也有点好奇..
2015-2-2 10:47
0
雪    币: 256
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你确定不是64位程序调用SHFileOperation吧?
那么有可能是32位程序先调用GetSystemDirectory获得C:\Windows\System32;
你自己写个测试程序看下SHFileOperation是否有关闭重定位不就知道了。。。。还搞那么麻烦。。。
2015-2-2 12:08
0
游客
登录 | 注册 方可回帖
返回
//