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 ,以偵測 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 應用程式] |
目標平臺 | 窗戶 |
標頭 | wow64apiset.h (包括 Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2 上的 Windows.h) |
連結庫 | Kernel32.lib |
DLL | Kernel32.dll |