次の方法で共有


IsWow64Process 関数 (wow64apiset.h)

指定されたプロセスが WOW64 または Intel64 x64 プロセッサで実行されているかどうかを判断します。

構文

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 に設定されます。

戻り値

関数が成功した場合、戻り値は 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 アプリ]
ターゲット プラットフォーム ウィンドウズ
ヘッダー wow64apiset.h (Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2 の Windows.h を含む)
ライブラリ Kernel32.lib
DLL Kernel32.dll

関連項目

GetNativeSystemInfo

IsWow64Message

WOW64