目录
附注
1、解释下问题含义,指在一个64位Windows系统上面(譬如Win7x64,Win10x64),如果一个32位的程序调用系统API打开文件对话框(譬如打开文件,保存文件)或者打开文件夹对话框,在指向系统盘下的Windows\System32目录时,会发现实际指向的是Windows\SysWOW64目录问题。
2、关于64位系统文件重定向问题,网上已经有很多文章进行了介绍,这里不再赘述(参考[1])。
3、测试验证环境:Windows10 x64 1909专业版。
4、打开/保存文件和打开文件夹,主要涉及API是GetOpenFileName和SHBrowseForFolder/SHGetPathFromIDList等(备注:打开文件夹会略微繁琐一点)。
问题背景
最近有客户反馈,使用我们提供的安全软件,在一些特殊场景(譬如信任文件),无法找到C:\Windows\System32下面一个指定的文件的文件(客户是想加白这个目录下面的一个文件)。收到反馈后,我们试验了下,发现真的有问题,不过初步判断应该就是x64系统上面的文件重定向问题(无法在文件对话框看到真正的c:\windows\system32下的子文件夹或者文件的原因是,被重定向到了c:\windows\syswow64下面,看到的都是这个目录下的文件和文件夹)。然而真正去解决的时候发现,bug比想象中难修复。
先准备这样一个环境:分别通过系统explorer手动建下面4个文件夹(也可以再在里面放一些具有标识作用的特殊文件):
C:\Windows\System32\00 我是真正的System32的子目录
C:\Windows\System32\01 大家都有的文件夹
C:\Windows\SysWOW64\00 我是SysWOWO64的子目录
C:\Windows\SysWOW64\01 大家都有的文件夹
(备注:标黄的部分是文件夹,如下图所示)
实验测试
1、用我们的安全软件,打开测试发现,定位到c:\Windows\System32目录发现展示果然实际上SysWOW64,此时是看不到真正的c:\Windows\System32下面的文件的。