在网上找了一下,发现大部分都是用IsWow64Process这个函数,函数原型为:
BOOL WINAPI IsWow64Process(
__in HANDLE hProcess,
__out PBOOL Wow64Process
);
参数Wow64Process表示是否为64位系统。
MSDN上给出了一个例子,摘抄如下:
#include <windows.h>
#include <stdio.h>
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL IsWow64()
{
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
if (NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
{
// handle error
}
}
return bIsWow64;
}
void main()
{
if(IsWow64())
printf("Running on WOW64\n");
else printf("Running on 32-bit Windows\n");
}
但是MSDN Remakes注解中注释了如果一个64位应用程序在64位操作系统上运行时,参数Wow64Process被设置为FALSE,显然不是我们需要的。于是我想如果是用64位编译器编译的,直接让它返回TRUE,不就可以了吗,因为64位程序是不能在32位系统上跑的,所以就有了下面的代码:
BOOL IsWow64()
{
#ifdef _WIN64
return TRUE;
#endif
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
if (NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
{
// handle error
}
}
return bIsWow64;
}
当然_WIN64这个宏定义不能自己定义,否则都是64位系统了!