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 に設定されます。
戻り値
関数が成功した場合、戻り値は 0 以外の値になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
アプリケーションでは 、IsWow64Process ではなく IsWow64Process2 を使用して、WOW でプロセスが実行されているかどうかを判断する必要があります。 IsWow64Process2 は、特定のプロセスのホストとゲストの両方のアーキテクチャを明示的に返すことによって、複数の WOW 環境に固有のあいまいさを取り除きます。 アプリケーションでは、この情報を使用して、ARM64 でエミュレーションで実行されているなどの状況を確実に特定できます。 この関数を使用するアプリケーションをコンパイルするには、_WIN32_WINNTを 0x0501 以降として定義します。 詳細については、「 Windows ヘッダーの使用」を参照してください。
例
この関数をサポートしていないオペレーティング システムとの互換性を確保するには、 GetProcAddress を呼び出して 、IsWow64Process が Kernel32.dll に実装されているかどうかを検出します。 GetProcAddress が成功した場合は、この関数を呼び出しても安全です。 それ以外の場合、WOW64 は存在しません。 この手法は、現在のバージョンの 32 ビット Windows の Kernel32.dll にもこの関数が含まれているため、オペレーティング システムが 64 ビット バージョンの Windows であるかどうかを検出する信頼性の高い方法ではないことに注意してください。
#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 の Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |