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

另请参阅

GetNativeSystemInfo

IsWow64Message

WOW64