typedef BOOL (WINAPI * _tagWow64DisableWow64FsRedirection)(LPVOID *);
typedef BOOL (WINAPI * _tagWow64RevertWow64FsRedirection)(LPVOID);
PVOID g_OldValue ;
BOOL g_bCloseWowRedirection;
BOOL IsWow64() //判断是否是64位系统
{
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
if (NULL != fnIsWow64Process)
{
fnIsWow64Process(GetCurrentProcess(), &bIsWow64);
}
return bIsWow64;
}
bool IsWind64()
{
SYSTEM_INFO si;
GetNativeSystemInfo(&si);
if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
return true;
return false;
}
BOOL CloseWoWMap() //关闭文件重定向
{
g_OldValue = NULL;
g_bCloseWowRedirection = FALSE;
if (!IsWind64() || g_bCloseWowRedirection) return TRUE;
BOOL bRet = FALSE;
_tagWow64DisableWow64FsRedirection pFun = (_tagWow64DisableWow64FsRedirection)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),"Wow64DisableWow64FsRedirection");
if (pFun)
{
g_bCloseWowRedirection = TRUE;
return pFun(&g_OldValue);
}
return FALSE;
}
BOOL OpenWowMap() //打开文件重定向
{
//把64位的系统映射打开
if (!IsWind64() && !g_bCloseWowRedirection ) return TRUE;
_tagWow64RevertWow64FsRedirection pFun = (_tagWow64RevertWow64FsRedirection)GetProcAddress(GetModuleHandle(TEXT("kernel32")),"Wow64RevertWow64FsRedirection");
if (pFun)
{
g_bCloseWowRedirection = FALSE;
return pFun(g_OldValue);
}
return FALSE;
}