336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

※ C++ 소스 코드 상에서 현재 윈도우가 32bit 버전인지 64bit 버전인지 구분하는 방법에 대한 자료는 검색해보면 금방 구할 수 있습니다. 근데 그 중 많은 자료들이 IsWow64Process 함수 하나만 가지고 64bit 여부를 판단하는 잘못된 방법을 사용하고 있더군요. 이 때문에 많은 분들이 헷갈려 하실것 같아 정확한 방법을 간단하게 정리해서 올려봅니다.



현재 실행중인 프로세스 및 윈도우의 비트(32/64bit) 버전 확인

  

프로그램을 구현하다보면 소스 코드 상에서 현재 실행중인 프로세스가 32bit 버전인지 64bit 버전인지, 또는 64bit 윈도우즈에서 동작중인 32bit 버전(WOW64)인지 구분해할 일이 생길 수 있습니다. 또한 현재 설치된 윈도우가 32bit 버전인지 64bit 버전인지 구분해야 하는 경우도 있구요. 이와 같은 기능은 생각보다 간단하게 구현할 수 있으며, 다음과 같이 기능에 따라 세 가지 함수로 나누어 보았습니다.

 

BOOL IsCurrentProcess64bit()
{
#if defined(_WIN64)
    return TRUE;
#else
    return FALSE;
#endif
}

BOOL IsCurrentProcessWow64()
{
    BOOL bIsWow64 = FALSE;
    typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL);
    LPFN_ISWOW64PROCESS fnIsWow64Process;

    fnIsWow64Process = (LPFN_ISWOW64PROCESS)
                                       GetProcAddress(GetModuleHandle(TEXT("kernel32")), "IsWow64Process");
    if (!fnIsWow64Process)
        return FALSE;

    return fnIsWow64Process(GetCurrentProcess(), &bIsWow64) && bIsWow64;
}

BOOL Is64BitWindows()
{
    if (IsCurrentProcess64bit())
        return TRUE;

    return IsCurrentProcessWow64();
}

 

 

IsCurrentProcess64bit 함수는 현재 프로세스가 32bit 인지 64bit 인지 확인하는 함수입니다. 사실 어플리케이션이 32bit 인지 64bit 인지는 컴파일 타임에 이미 결정되는 것이기 때문에 함수로 만들 필요 없이 #if defined 매크로를 사용하여 처리해도 되지만 가독성을 위해 함수로 만들어 봤네요.

 

IsCurrentProcessWow64 함수는 현재 프로세스가 WOW64 환경에서 동작중인지 확인하는 함수입니다. WOW64란 "Windows on Windows 64-bit" 의 약자로 64bit 윈도우에서 32bit 어플리케이션이 동작하게 해주는 서브 시스템을 환경을 얘기합니다. 즉, 이 함수는 현재 윈도우가 64bit 이고 현재 프로세스가 32bit 일 경우에만 TRUE를 리턴하게 되며 내부적으로는 IsWow64Process API 함수를 이용하여 구현되어 있습니다.

 

Is64BitWindows 함수는 현재 설치된 윈도우가 32bit 인지 64bit 인지 확인하는 함수입니다. 구글링 하다보니 괜찮은 방법으로 구현된 소스가 있어서 비슷하게 적용해보았습니다. 일단 현재 프로세스가 64bit 일 경우에는 설치된 윈도우는 두 말 할 것도 없이 64bit 입니다. 64bit 어플리케이션은 64bit 윈도우에서만 실행되기 때문이죠. 그리고 현재 프로세스가 32bit 일 경우에는 IsCurrentProcessWow64 함수를 호출하여 판단하면 됩니다. 현재 프로세스가 32bit 이고 WOW64 환경에서 동작하고 있다면 현재 설치된 윈도우는 64bit 라는 결론을 얻을 수 있는거죠.



Reference

 

How to detect programmatically whether you are running on 64-bit Windows


출처 : http://devmachine.blog.me/198372301

'Programming > C / C++' 카테고리의 다른 글

C++ 텔레그램 채널  (0) 2020.02.10
int64_t 값 출력하기  (0) 2015.08.15
to read UTF-8 XML using TinyXML  (0) 2015.08.06
Named Pipe Server Using Overlapped I/O and Client  (0) 2015.06.12
Windows Named Pipe 구현 간단 정리  (0) 2015.06.11
Posted by 역시인생한방
,