IsWow64Message 関数 (winuser.h)

現在のスレッドのキューから最後に読み取られたメッセージが WOW64 プロセスから送信されたかどうかを判断します。

構文

BOOL IsWow64Message();

戻り値

関数は、現在のスレッドのキューから最後に読み取られたメッセージが WOW64 プロセスから送信された場合は TRUE を返し、それ以外の場合は FALSE を返します。

解説

この関数は、メッセージがポインター依存データを含むデータ構造に関連付けられている場合に、32 ビット クライアント アプリケーションから送信されたプライベート メッセージを受信できる 64 ビットネイティブ アプリケーションの開発に役立ちます。 このような状況では、64 ビットネイティブ アプリケーションでこの関数を呼び出して、メッセージが WOW64 プロセスから送信されたかどうかを判断し、メッセージを適切にサンクすることができます。

この関数をサポートしていないオペレーティング システムとの互換性を保つには、 GetProcAddress を 呼び出して 、IsWow64Message が User32.dll に実装されているかどうかを検出します。 GetProcAddress が成功した場合は、この関数を呼び出しても問題ありません。 それ以外の場合、WOW64 は存在しません。 この手法は、現在のバージョンの 32 ビット Windows の User32.dll にもこの関数が含まれているため、オペレーティング システムが 64 ビット バージョンの Windows であるかどうかを検出する信頼性の高い方法ではないことに注意してください。

#include <windows.h>
#include <tchar.h>

typedef BOOL (WINAPI *LPFN_ISWOW64MESSAGE) (void);

LPFN_ISWOW64MESSAGE fnIsWow64Message;

BOOL IsWow64Msg()
{
    // IsWow64Message is not available on all supported versions of Windows
    // Use LoadLibrary to ensure that the DLL containing the function is loaded
    // and GetProcAddress to get a pointer to the function if available.

    fnIsWow64Message = (LPFN_ISWOW64MESSAGE) GetProcAddress(
        LoadLibrary(TEXT("user32")), "IsWow64Message");
  
    if (NULL != fnIsWow64Message)
    {        
        return (fnIsWow64Message());
    }
    else return FALSE;
}

int main( void )
{
    if(IsWow64Msg())
    {
        _tprintf(TEXT("The last message was from a 32-bit process.\n"));
    }
    else if (NULL == fnIsWow64Message )
    {
        _tprintf(TEXT("The IsWow64Message function is not available (%d).\n"), GetLastError());
    }
    else 
    {
        _tprintf(TEXT("The last message was from a 64-bit process.\n"));
    }
    return 0;
}

要件

   
サポートされている最小のクライアント Windows Vista、SP2 を使用した Windows XP [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008、Windows Server 2003 SP1 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winuser.h (Windows.h を含む)
Library User32.lib
[DLL] User32.dll

関連項目

GetNativeSystemInfo

IsWow64Process

WOW64