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, WINDOWS XP SP2 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008, Windows Server 2003 SP1 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winuser.h(Windows.h 포함)
라이브러리 User32.lib
DLL User32.dll

추가 정보

GetNativeSystemInfo

IsWow64Process

WOW64