当前位置 博文首页 > tatorey的博客:IsWow64Process函数判断程序位数
IsWow64Process返回值为TRUE&FALSE,在MSDN上的解释和定义如下:
BOOL IsWow64Process(
HANDLE hProcess, //目标进程句柄
PBOOL Wow64Process //反出值TRUE&FALSE
);
The IsWow64Process function determines whether the specified process is running under WOW64.
也就是说IsWow64Process函数是用来判断指定的进程是否在WOW64虚拟环境下下运行。这个函数其实本质上并没有判断位数的功能。 但是通过给定的函数实例分析我们不难得出该函数返回值的通俗解释。
目标程序 | Windows虚拟环境 | 返回值 |
---|---|---|
64-bit | 64-bit | FALSE |
32-bit | 64-bit | TRUE |
32-bit | 32-bit | FALSE |
所以仅根据返回值无法得到目标的真实位数,不妨再加上系统位数的判断,进行两次比对,获得目标进程位数便轻而易举!用GetNativeSystemInfo函数进行系统位数的判断这里就不再赘述,下面给出用IsWow64Process 函数进行目标进程判断的不完全实例代码!
DWORD IsTargetArchitecture()
{
BOOL IsWow64;
DWORD TargetArchitecture = X86;
HANDLE ProcessHandle;
if (!IsWow64Process(ProcessHandle, &IsWow64)) //判断函数是否
{
return FALSE;
}
if (IsWow64) //真32位
{
TargetArchitecture = X86; //目标进程位数
}
else {
SYSTEM_INFO SystemInfo = { 0 };
GetNativeSystemInfo(&SystemInfo); //获得系统信息
if (SystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) //得到系统位数64
TargetArchitecture = X64;
else if (SystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL)//得到系统位数32
TargetArchitecture = X86;
else
return FALSE;
}
return TargetArchitecture;
}
cs