한참만에 글 올리는 것 같네요... 흐흐~~
한 페이지 분량으로 다루기에는 다소 애매한 주제였던 것 같습니다.
좀 더 디테일하게 쓰고 싶었는데 쓰다보니 분량이 걸리더군요.
윈도우 개발자를 위한 가장 기초적인, 동시에 가장 방대한 레퍼런스가 있다면 바로 MSDN일 것이다. 상당수의 고급 개발자들은 MSDN만 주어진다면 거의 모든 정보를 다 얻을 수 있다고 말하기도 한다. 하지만 아직도 초보 개발자들은 MSDN은 설치해두었지만 그 속에서 정보를 얻고 있지는 못하다. 게시판에 올린 질문에 냉소적으로 올라오는 MSDN을 참고하라는 말에 상처를 받기도 한다. 왜냐하면 정작 본인은 MSDN을 보았으나 정보를 얻지 못했기 때문이다. 이 글에서는 이러한 MSDN을 효율적으로 보는 방법에 대해서 다룰 것이다. 각 함수에 대한 정보를 보고 이해하는 방법에서부터 방대한 MSDN에서 자신이 원하는 정보를 찾기 위한 방법까지 언급할 것이다. 물론 이 과정에서 기본적인 영어 독해 실력은 필수사항이다.
MSDN에서 얻을 수 있는 가장 기초적인 정보는 개별 윈도우 API의 사용방법이다. 여러분이 OpenProcess의 정보를 얻고 싶다면 MSDN을 켜고 색인에서 OpenProcess를 입력하면 된다. 하지만 고민은 이 과정부터 시작된다. 검색된 OpenProcess가 너무 많기 때문이다. 일반적으로 PC에 설치되는 윈도우 운영체제에서 사용되는 OpenProcess 정보를 보고 싶다면 옆에 base라고 붙은 것을 클릭하면 된다.
이렇게 정보를 찾아 왔다면 MSDN은 여러분에게 OpenProcess에 대한 모든 정보를 보여줄 것이다. MSDN의 함수 설명은 총 여섯 개의 카테고리로 이루어진다. 인자 정보(Parameters), 리턴 값(Return Values), 주의 사항(Remarks), 예제 코드(Example Code), 요구 사항(Requirements), 관련 함수(See Also)가 그것이다.
인자 정보에서 여러분이 이해해야 할 가장 큰 정보는 각 인자의 종류다. 종류는 크게 입력(in), 출력(out), 입출력(in, out)으로 나뉜다. 입력 정보의 대표적인 형태는 OpenProcess의 첫 번째 인자와 같은 것이다. OpenProcess의 첫 번째 인자는 열고자하는 프로세스 핸들의 권한을 설정하는 값으로 설명에 있는 process access rights라고 된 부분을 클릭해서 나오는 정보를 조합해서 넘기면 된다. 출력 정보의 대표적인 형태는 GetWindowText 함수에서 찾을 수 있다. GetWindowText의 두 번째 인자는 윈도우 캡션명을 저장할 문자열 포인터다. 이 공간은 출력용 포인터로 세 번째 인자인(nMaxCount)를 저장할 수 있을 만큼의 공간을 가진 버퍼를 넘겨야 한다. 끝으로 입출력 정보의 대표적인 형태는 GetVersionEx 함수에서 찾을 수 있다. GetVersionEx 함수의 유일한 인자인 lpVersionInfo는 넘기기 전에 dwOSVersionInfoSize에 구조체 크기를 지정해 주어야 한다. 이 후 함수를 호출하면 GetVersionEx 함수는 윈도우 버전 정보를 lpVersionInfo에 담아준다.
리턴 값에서 인지해야 할 가장 중요한 두 가지 정보는 성공한 경우의 리턴 값과 실패한 경우의 리턴 값이다. 또한 실패한 경우에 추가적으로 실패한 원인을 찾을 수 있는 방법에 대해서도 알아두어야 한다. 대부분의 윈도우 API의 경우 GetVersionEx 함수와 같이 성공한 경우에 0이 아닌 값을, 실패한 경우에 0을 반환한다. 또한 실패한 경우에는 추가적인 실패 원인을 GetLastError를 통해서 조회할 수 있다. 종종 GetCurrentProcess와 같이 절대 실패하지 않는 함수들도 있다. 동시에 실패하지만 MSDN에는 실패에 대한 언급이 없는 GetWindowThreadProcessId와 같은 함수도 있다. GetWindowThreadPorcessId 함수는 잘못된 윈도우 핸들이 전달되면 실패하며, 실패여부는 GetLastError를 통해서 알 수 있다.
끝으로 각 함수에 첨부되어 있는 요구 사항 표를 살펴보는 방법에 대해서 알아보자. 요구 사항 표에는 각 함수를 호출할 수 있는 운영체제가 나와 있다. 여기서는 여러분의 제품이 지원하는 운영체제의 하한선이 존재하는 가만 확인하면 된다. Windows 98을 지원해야 하는 제품이라면 VerifyVersion 함수를 정적으로 사용하는 것은 피해야 한다. 이 함수는 Windows 2000 이상부터 사용가능하기 때문이다. 굳이 이 함수를 사용해야 한다면 GetProcAddress로 동적으로 함수 주소를 구해서 사용하는 방법을 택해야 한다.
이제 한 함수의 정보를 알아내는 방법에 대해서 살펴보았다. 하지만 망망대해 같은 MSDN을 탐색하는데에는 이런 방법으로는 한계가 있다. 좀더 효과적으로 다양한 정보를 한번에 살펴볼 수 있는 방법이 필요한 것이다. 이런 방법 중에 하나가 마법과 같은 버튼인 목차 동기화(Sync Contents) 버튼에 있다. OpenProcess 설명 부분에서 이 버튼을 눌러 보자. 그러면 OpenPorcess 설명이 있는 목차로 이동하게 된다. 여기서 여러 분들은 세 가지 중요한 사항을 인지해야 한다. 하나는 OpenProcess가 있는 목차의 위치다. 두 번째는 OpenProcess와 같은 단계에있는 다른 함수들에 대한 정보다. 마지막 정보는 OpenProcess 목차 부위에 있는 기술 문서(Technical Article)이다.