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 |