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 下執行,該值的指標會設定為 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 來偵測 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 Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |