본문 바로가기
프로그래밍/c++

운영체제 시스템 정보를 알아보자!

by 긱플레이어 2011. 3. 3.
운영체제 시스템 정보를 알아보자!

CPU 의 타입,
각 프로세스가 사용가능한 가장 큰 주소값
사용 가능항 CPU 및 코어 개수
메모리 할당에 사용하는 페이지 단위의 사이즈
등등의 기본적인 정보를 가져오는 방법을 살펴보자.

winbase.h 에 있는 기능을 사용하자..

아래와 같은 구조체가 정의 되어있고..
typedef struct _SYSTEM_INFO {
union {
DWORD dwOemId;          // Obsolete field...do not use
struct {
WORD wProcessorArchitecture; // x86, x64, IA-64 등을 나타냄
WORD wReserved; //사용안함
};
};

//cpu의 페이지 크기 x86과 x64 머신에서는 4096,, IA-64머신은 8192바이트.
DWORD dwPageSize;

//각 프로세스가 사용할 수 있는 가장 작은 주소값
//모든 프로세스의 가장 작은 주소값(0)으로부터
//64KB에 해당하는 주소 공간은 항상 프리 상태를 유지해야 하기 때문에
//이값은 65536 혹은 0x00010000 이다
LPVOID lpMinimumApplicationAddress; 

LPVOID lpMaximumApplicationAddress; //각 프로세스가 사용할 수 있는 가장 큰 주소 값.
DWORD_PTR dwActiveProcessorMask; // 사용 가능한 CPU를 가리키는 비트마스트 (스레드를 수행할 수 있는 CPU)
DWORD dwNumberOfProcessors; // 머신에 설치된 CPU코어 개수
DWORD dwProcessorType; // 사용안함

// 프로세스 주소 공간에서 특정 영역을 예약할 때 사용하는 단위 크기,
// 보통 65536 바이트
DWORD dwAllocationGranularity;

// 프로세서의 아키텍처를 세분화한 값.
// 펜티엄 III , 펜티엄 IV 등을 나타내기위한값
WORD wProcessorLevel;

WORD wProcessorRevision; // 프로세서의 레벨을 세부화한 값.
} SYSTEM_INFO, *LPSYSTEM_INFO;


아래의 함수에 인자로 넣어주면 정보를 알아올 수 있다..

void WINAPI GetSystemInfo(
  __out  LPSYSTEM_INFO lpSystemInfo
);

만약 자신의 윈도우즈 OS 가 64 비트라면..
32비트 어플리케이션을 구동하기위해 WOW64 모드에서 어플리케이션을 호환모드로 구동시킨다.

현재 어플리케이션이 WOW64 모드 인지 알아보는 방법은 
아래의 IsWow64Process 함수를 사용하면 알수있다..

BOOL WINAPI IsWow64Process(
__in   HANDLE hProcess,
__out  PBOOL Wow64Process
);

IsWow64Process 함수에 인자로 들어가는 프로세스 핸들은
아래의 GetCurrentProcess 함수를 이용해 가져올수 있다..

HANDLE WINAPI GetCurrentProcess(void);

위의 방법을 사용해서 WOW64 모드인지 확인했다면

2가지의 선택사항이 주어진다..
GetSystemInfo 함수를 사용하게되면 WOW64 모드의 시스템 정보를 받을수 있고.
GetNativeSystemInfo 함수를 사용하게되면 WOW64와 상관없이 오리지널 시스템의 정보를 받을수있다.

__out LPSYSTEM_INFO lpSystemInfo );

댓글