今天调试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接口是如何避免文件系统重定向的?
请教各位,进一步验证的思路,或者提供相关信息,谢谢。
|