首页 > 代码库 > x64系统的判断和x64下文件和注册表访问的重定向——补记
x64系统的判断和x64下文件和注册表访问的重定向——补记
原来的地址
x64系统的判断和x64下文件和注册表访问的重定向(1)
x64系统的判断和x64下文件和注册表访问的重定向(2)
x64系统的判断和x64下文件和注册表访问的重定向(3)
之前在(3)里面讨论过%ProgramFiles%这个环境变量的指向问题,其实在x64环境下面还有两个环境变量可以使用:%ProgramFiles(x86)%和%ProgramW6432%,如果你的系统安装在C盘,那么对应关系是这样的(注32位系统只有%ProgramFiles%,这里不讨论):
%ProgramFiles% | %ProgramFiles(x86)% | %ProgramW6432% | |
32位程序 | C:\Program Files (x86) | C:\Program Files (x86) | C:\Program Files |
64位程序 | C:\Program Files | C:\Program Files (x86) | C:\Program Files |
分享一个有意思的文件重定向问题,在Wow环境(也就是32位程序运行在64位系统下)下,通过一种特殊的Hack方式可以规避文件重定向。想象这样一种场景,如果你的32位程序在64位系统想访问C:\Windows\System32\systemlnk.lnk,它实际上会被重定向访问C:\Windows\SysWOW64\systemlnk.lnk这个文件,可能就不是你想要的结果了,解决这个问题,用(3)里面提到的关闭文件重定向的方式是可以可以解决的,另外一种方式就是这里提到的Hack方式,把C:\Windows\System32\systemlnk.lnk里面的System32换sysnative,变成C:\Windows\sysnative\systemlnk.lnk,那么就可以真正去访问C:\Windows\System32\systemlnk.lnk了,也不用去关闭文件重定向了。
注:32位系统下的32位程序和64位系统下64位程序不要用这种方式。
// ------------------------------------------------------------------------- // 函数 : KWow64FsRedrt::IsWow64Process // 功能 : 判断是否运行在Wow模式 // 返回值 : BOOL // 附注 : 也就是32位程序运行在64位系统,而64位程序调用这个函数返回FALSE // ------------------------------------------------------------------------- BOOL KWow64FsRedrt::IsWow64Process() { BOOL bIsWow64 = FALSE; typedef BOOL (WINAPI *PF_ISWOW64PROCESS)(HANDLE, PBOOL); PF_ISWOW64PROCESS pfIsWow64Process = (PF_ISWOW64PROCESS)::GetProcAddress( GetModuleHandle(_T("kernel32.dll")), "IsWow64Process"); if (pfIsWow64Process) { if (!pfIsWow64Process(GetCurrentProcess(), &bIsWow64)) { // handle error } } return bIsWow64; }
x64系统的判断和x64下文件和注册表访问的重定向——补记