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 或 ARM64 处理器上的 WOW64 下运行,则指向设置为 TRUE 的值的指针。 如果进程在 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,以检测是否在 Kernel32.dll中实现 IsWow64Process。 如果 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 和 SP2 的 Windows XP [桌面应用 |UWP 应用] |
支持的最低服务器 | Windows Server 2008、Windows Server 2003 SP1 [桌面应用 |UWP 应用] |
目标平台 | 窗户 |
标头 | wow64apiset.h(包括 Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2 上的 Windows.h) |
库 | Kernel32.lib |
DLL | Kernel32.dll |