그냥 사는 이야기

Win32 API x86, x64 구분? 본문

Development/System

Win32 API x86, x64 구분?

없다캐라 2010. 1. 27. 19:53
반응형

Win32 API를 통해서 시스템이 32bit인지 64bit 운영체제 인지 알아 보려면 아래와 같은 식으로 하면 된다.

GetSystemInfo vs GetNativeSystemInfo

SYSTEM_INFO siSysInfo;

GetNativeSystemInfo(&siSysInfo);

printf("  Processor Architecture %d\n", siSysInfo.wProcessorArchitecture);

GetSystemInfo() 대신 GetNativeSystemInfo()를 사용해야 한다.

Windows Server 2003 x64에서 해보니 GetSystemInfo()는 0 값을 return 한다. x86으로 리턴한 것이다. MSDN에 설명이 나와 있지만 GetSystemInfo()는 과거에 나온 함수로서 WOW64에 대한 고려가 되어 있지 않다. 그러니깐 64비트 환경에서 32비트 호환모드로 동작하는 프로세스에서는 GetSystemInfo()은 마치 32비트 환경인줄 알고 리턴한다는 것이다.

WOW64를 더 잘 이해하려면 [64비트 윈도우 프로그래밍]① 32비트 프로그램을 엄호하라 글 참조

따라서 이런 경우에도 정확하게 동작하려면 GetNativeSystemInfo()를 사용하면 된다. 아마 WINVER 501 이상부터 가능했던 것 같은데.

매번 실수 할까봐...

Comments