IsWow64Process 函数 (wow64apiset.h)
确定指定的进程是在 WOW64 还是 x64 处理器的 Intel64 下运行。
语法
BOOL IsWow64Process(
[in] HANDLE hProcess,
[out] PBOOL Wow64Process
);
参数
[in] hProcess
进程的句柄。 句柄必须具有PROCESS_QUERY_INFORMATION或PROCESS_QUERY_LIMITED_INFORMATION访问权限。 有关详细信息,请参阅 进程安全性和访问权限。
Windows Server 2003 和 Windows XP: 句柄必须具有PROCESS_QUERY_INFORMATION访问权限。
[out] Wow64Process
指向值(如果进程在 Intel64 或 x64 处理器上的 WOW64 下运行)的指针。 如果进程在 32 位 Windows 下运行,则该值设置为 FALSE。 如果进程是在 ARM 上运行在 64 位Windows 10下的 32 位应用程序,则该值设置为 FALSE。 如果进程是在 64 位 Windows 下运行的 64 位应用程序,则该值也设置为 FALSE。
返回值
如果函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
注解
应用程序应使用 IsWow64Process2 而不是 IsWow64Process 来确定进程是否在 WOW 下运行。 IsWow64Process2 通过显式返回给定进程的主机和来宾的体系结构,消除了多个 WOW 环境固有的歧义。 应用程序可以使用此信息来可靠地识别诸如在 ARM64 上模拟的情况下运行的情况。 若要编译使用此函数的应用程序,请将_WIN32_WINNT定义为 0x0501 或更高版本。 有关详细信息,请参阅 使用 Windows 标头。
示例
为了与不支持此函数的操作系统兼容,请调用 GetProcAddress 以检测 isWow64Process 是否在 Kernel32.dll 中实现。 如果 GetProcAddress 成功,则调用此函数是安全的。 否则,WOW64 不存在。 请注意,此方法不是检测操作系统是否为 64 位版本的 Windows 的可靠方法,因为当前版本的 32 位 Windows 中的 Kernel32.dll 也包含此函数。
#include <windows.h>
#include <tchar.h>
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL IsWow64()
{
BOOL bIsWow64 = FALSE;
//IsWow64Process is not available on all supported versions of Windows.
//Use GetModuleHandle to get a handle to the DLL that contains the function
//and GetProcAddress to get a pointer to the function if available.
fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
if(NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
{
//handle error
}
}
return bIsWow64;
}
int main( void )
{
if(IsWow64())
_tprintf(TEXT("The process is running under WOW64.\n"));
else
_tprintf(TEXT("The process is not running under WOW64.\n"));
return 0;
}
要求
最低受支持的客户端 | Windows Vista、Windows XP 和 SP2 [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows Server 2008、Windows Server 2003 SP1 [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | wow64apiset.h (包括 Windows Server 2003 上的 Windows.h、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2) |
Library | Kernel32.lib |
DLL | Kernel32.dll |