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

 




하제소프트 이봉석 사장님의 IT EXPERT 윈도우 디바이스 드라이버가 출간되었습니다.

이번에 저는 이 책의 감수를 맡게 되었습니다. 국내 윈도우 디바이스 드라이버계의 독보적인 존재이신 이봉석 사장님의 저서를 감수하게 되어 매우 영광으로 생각하고 있습니다.

이 책의 특징을 조금 살펴보자면, 윈도우 디바이스 드라이버를 개발하다 보면 많이 어려워하는 부분인 컨텍스트에 대해 자세하게 설명이 되어있습니다. 또한 기존 디바이스 드라이버 책에서는 크게 다루지 안았던 inf 파일의 형식과 사용법에 대해서도 잘 나와있습니다.

또한 실제 윈도우상의 여러가지 장치 스택을 쉽게 설명하고 있고, WDM 방식 드라이버에서 PNP 및 전원 처리에 관해 중점적으로 설명하고 있습니다.

그 이외에도 일반적인 동기화 문제와 취소 처리 루틴과 I/O 과정에서의 동기화 문제와 기존 디바이스 드라이버 책에서는 잘 다루지 않았던 멀티 프로세서 처리, 인터럽트, DMA, 각종 후킹 방법을 담고 있습니다.

이 책 전에 출간되었던 "고급 개발자들만이 알고 있던 디바이스 드라이버 구조와 원리 그리고 제작 노하우"가 급 절판 되면서 많은 사람들이 안타까워 하고 있었는데, 이번에 한빛미디어에서 새롭게 출간되어 저또한 독자로서 매우 기쁠 따름입니다.

이번 책은 "고급 개발자들만이 알고 있던 디바이스 드라이버 구조와 원리 그리고 제작 노하우"와는 별개로 새롭게 집필되었기 때문에 윈도우 디바이스 드라이버 개발자는 꼭 한번은 살펴보아야 할 책입니다.





Kernel Memory Editor 1.0.0이 릴리스 되었습니다.

Kernel Memory Editor는 Windows의 커널 메모리를 편집하는 프로그램입니다. 커널인 ntoskrnl.exe를 비롯한 커널 메모리상에 로드된 드라이버의 내용을 편집할 수 있습니다.

즉 런타임 패치가 가능하다는 것입니다. 그리고 커널 메모리는 커널 및 해당 드라이버에 대한 충분한 이해를 한 뒤 편집을 할 것을 권장합니다.

다운로드 및 버그 보고, 기능 추가 요청등은 KernelMemoryEditor 페이지에서 할 수 있습니다.



윈도우에서 드라이버를 로드하려면 일단 CreateService 함수로 서비스를 생성해야 합니다. 드라이버를 잘 사용하고 난 뒤 드라이버를 언로드하고 드라이버의 서비스를 삭제할 때 DeleteService 함수를 사용합니다.

이때 응용프로그램과 통신을 위해 생성한 디바이스 오브젝트 등을 CreateFile 등의 함수로 열었을 때 꼭 핸들을 닫아줘야 합니다.

핸들을 닫지 않은채로 DeleteService 함수로 드라이버 서비스를 삭제하게 되면 완전히 삭제되지 않고 흔적이 남아있게 됩니다.

즉 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<드라이버 이름> 키 아래에 DeleteFlag라는 DWORD 값이 생기게 됩니다. 데이터는 1이 들어가있습니다.



서비스가 완전히 삭제되지 않고 삭제 대기중인 상태에서 다시 OpenService로 해당 서비스의 핸들을 얻고 DeleteService 함수를 호출하게 되면 ERROR_SERVICE_MARKED_FOR_DELETE(0x00000430, 1072, 지정된 서비스가 지워진 것으로 표시되었습니다.) 에러가 발생하게 됩니다.

DeleteFlag가 설정된 서비스는 일정 시간이 지나면 자동적으로 삭제됩니다. 하지만 디바이스의 핸들을 닫지 않은 상태에서 CreateService(OpenService)와 DeleteService를 연속적으로 호출하게 되면, DeleteFlag가 남아있는 채로 서비스를 삭제하려고 하는 상황이 생길 수 있으니 주의해야 합니다.