IsWow64Process

IsWow64Process 函式

確定指定進程是否運行在64位作業系統的32環境(Wow64)下。

語法

BOOL WINAPI IsWow64Process( __in HANDLE hProcess, __out PBOOL Wow64Process );

參數,返回值,注意,

參數

hProcess
進程句柄。該句柄必須具有PROCESS_QUERY_INFORMATION 或者 PROCESS_QUERY_LIMITED_INFORMATION 訪問許可權
Wow64Process
指向一個bool值,
如果該進程是32位進程,運行在64作業系統下,該值為True,否則為False。
如果該進程是一個64位應用程式,運行在64位系統上,該值也被設定為False。
如果該進程運行在32位系統下,該值會被設定為False
可以用GetNativeSystemInfo();獲得當前作業系統位數相關信息。

返回值

如果函式成功返回值為非零值。
如果該函式失敗,則返回值為零。要獲取擴展的錯誤的信息,請調用GetLastError .
微軟的例子:

#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;
}

注意

使用此函式判斷作業系統是32位還是64位並不合適,勉強要用的話,可以指向一個32位進程。
比較合適的做法是:
BOOL Is64bitSystem()
{
SYSTEM_INFO si;
GetNativeSystemInfo(&si);
if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 )
return TRUE;
else
return FALSE;
}

相關詞條

熱門詞條

聯絡我們