Home | Info | Research | Blog | Repos | Messages | Contact Me

 




윈도우 프로젝트 필수 유틸리티 - Subversion, Trac, CruiseControl.NET이 출간되었습니다.

요즘 제가 블로그에 글 쓰는 것이 뜸했습니다. 다 이 책 때문이었습니다. 원래는 좀더 일찍 나올 수 있었는데, 표지 결정이 늦어지면서 5월 30일에 출간하게 되었습니다. (이때를 틈타 막판에 원고를 수정할 수 있었습니다. 편집자들이 너무 고생을해서 저를 잡아먹으려고 작전을 세우고 있다는 소문이...)

윈도우 기반 환경에서 Subversion, Trac, CruiseControl.NET을 활용하는 방법에 관한 책입니다.

윈도우용 Subversion, TortoiseSVN의 기본적인 사용 방법과 Apache와 연동하기, Trac 설치 및 사용 방법, CruiseControl.NET 빌드 스크립트 문법과 사용 방법을 설명합니다.

그리고 PDB 파일에 Subversion 저장소 정보를 기록하고 심볼 서버 형태로 저장하는 방법도 포함되어 있습니다. 이 과정을 CruiseControl.NET과 연동하는 방법도 설명합니다.

배포 자동화를 위한 릴리스(Release) 서버 구축 방법, 그리고 문서화 도구인 Doxygen 사용 방법과 CruiseControl.NET을 연동하기, Subversion 저장소와 Trac 데이터베이스를 자동으로 백업하기, 윈도우 드라이버 자동 빌드 하기 등의 내용으로 구성되어 있습니다.

내용 설명이 길었습니다. 결론은 "개발자가 일하기 편한 환경 만들기"입니다. 개발 이외의 관리에 소비되는 시간을 절약하여 좀더 개발에 집중할 수 있게 하는 것이 목적입니다.

많은 개발자들이 삽질에서 벗어나 좀더 편한 환경에서 일할 수 있었으면 합니다.

자주 하는 질문
추가 팁
독자 후기
오탈자




윈도우에는 3종류의 APC가 있습니다.

먼저 유저 APC가 있는데, 이것은 유저모드 프로그래밍에서 QueueUserApc 함수로 APC를 등록하거나, overlapped I/O에서 사용됩니다.

노멀 APC는 PASSIVE_LEVEL에서 실행되며 유저 APC를 선점할 수 있습니다.

스페셜 APC는 APC_LEVEL에서 실행되며 유저모드 코드, 노멀 APC 및 PASSIVE_LEVEL에서 실행되는 쓰레드를 선점할 수 있습니다. 이 스페셜 APC는 I/O 완료에 사용됩니다.

이 노멀 APC와 스페셜 APC는 커널 모드에서 실행됩니다.



윈도우(XP 이상)에서 USB 키보드(USB Composite 장치)를 꽂으면 기본적으로 usbccgp.sys가 로드 됩니다. 마찬가지로 USB 메모리를 꽂으면 usbstor.sys가 로드 됩니다. 각 USB 장치를 빼면 해당 드라이버는 언로드 됩니다. (단 같은 종류의 USB 장치가 여러개 꽂혀 있을 때 모든 장치가 빠져야 해당 드라이버가 언로드 됩니다.)

여기서 중요한 것은 ObReferenceObjectByName과 같은 함수를 이용하여 \\Driver\usbccgp나 \\Driver\usbstor를 참조 했을 때 입니다. usbccgp.sys나 usbstor.sys와 같이 장치의 장착 여부에 따라 로드, 언로드 되는 드라이버는 ObReferenceObjectByName로 드라이버 오브젝트를 참조 한 뒤 반드시 ObDereferenceObject 함수로 레퍼런스 카운트를 감소시켜 주어야 합니다.

ObDereferenceObject 함수로 레퍼런스 카운트를 감소시켜 주지 않은 상태에서 USB 키보드나 USB 메모리를 제거하면 usbccgp.sys 또는 usbstor.sys 드라이버 자체는 언로드 되지만 드라이버 오브젝트는 계속 남아 있게 됩니다. 이 상태에서 USB 키보드나 USB 메모리를 다시 꽂게 되면 usbccgp.sys 또는 usbstor.sys 드라이버가 로드 되지만 해제 되지 않은 이전 드라이버 오브젝트 때문에 새로운 드라이버 오브젝트를 생성하는데 실패하게 됩니다.

드라이버 오브젝트 생성에 실패하면 usbccgp.sys 또는 usbstor.sys 드라이버는 정상 작동 하지 않기 때문에 USB 키보드 또는 USB 메모리가 인식되지 않게 되는 것입니다.

PNP 처리와는 무관하게 ObReferenceObjectByName 함수를 사용하고 ObDereferenceObject 함수로 레퍼런스 카운트를 감소시켜 주지 않는 것에 따라서 플러그 앤 플레이가 되지 않을 수 있으니 주의해야 합니다.

참고 : USB Composite 장치
다중 USB 인터페이스(multiple USB interface)를 지원하는 USB 장치를 Composite 장치라고 합니다.(보통 두개 이상의 Device Object를 생성합니다.) 이 Composite 장치를 꽂으면 usbccgp.sys가 로드 됩니다. 하지만 Composite 장치가 아니라면 usbccgp.sys는 로드 되지 않습니다.
USB Common Class Generic Parent Driver
USB Driver Stack for Windows XP and Later