2009년 9월 2일 수요일

VC++에서 WOW64에서 동작중인지 확인하는 방법

32비트 윈도우 어플리케이션이 실행되는 환경이 진짜 32비트인지, WOW64인지 확인하는 방법이 궁금해졌다.
찾아보니 역시 모든 소스는 MSDN에 있더라.

IsWow64Process()라는 함수가 있는데, 이 놈을 실행하면 자신의 환경이 진짜 32비트인지 가짜인지를 알려준다.

포함해야 하는 헤더는 windows.h 하나 뿐이다.
아래와 같이 간단하게 IsWow64() 함수를 만들어서 사용하면 된다.

#include <windows.h>

typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);

LPFN_ISWOW64PROCESS fnIsWow64Process;

BOOL IsWow64()
{
    BOOL bIsWow64 = FALSE;

    fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
        GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
 
    if (NULL != fnIsWow64Process)
    {
        if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
        {
            // 핸들 오류. 알아서 오류 처리
        }
    }
    return bIsWow64;
}

참 쉽죠잉?

- 출처: IsWow64Process Function

댓글 2개:

  1. WOW 라길래 WOW가 떠올랐어요 -ㅁ-

    음.. 64bit emulation이니.. 이 녀석이 4GB 이상 32bit winXP에서 지원하도록 해주는 녀석인가요?

    답글삭제
  2. @구차니 - 2009/09/02 09:40
    x64 OS에서 x86 어플을 돌릴 때 사용되는 Windows On Window 엔진을 WOW64라고 합니다. ^^;

    답글삭제