Top

실전 윈도우 디바이스 드라이버 [윈도우 개발자를 위한 실무 유형별 드라이버 개발 가이드]

  • 지은이이봉석
  • ISBN : 9788960776746
  • 42,800원
  • 2015년 02월 27일 펴냄
  • 페이퍼백 | 628쪽 | 188*250mm
  • 시리즈 : 임베디드 시스템

판매처

개정판

책 소개

요약

이 책은 윈도우 디바이스 드라이버를 처음 개발하려는 독자들과 실무에서 필요로 하는 디바이스 드라이버를 개발하는 데 도움이 되는 지식을 얻고자 하는 독자들을 위해서 작성되었다.
이 책은 디바이스 드라이버 개발에 처음 입문할 때 꼭 읽어봐야 할 부분인 기본편(1장과 2장)과 실무에서 장치유형별(디스크, HID, I2C, 오디오, 커널 코드 가로채기, PCIe) 디바이스 드라이버를 개발하는 개발자들을 위한 응용편(3장부터 8장까지), 크게 두 부분으로 나뉜다. 따라서 디바이스 드라이버 개발에 처음 입문하는 독자들이나 실무에서 실제 하드웨어를 가지고 윈도우 운영체제에서 동작하는 디바이스 드라이버를 만들어야 하는 독자 모두를 만족시킬 수 있는 책이 될 것이다.

추천의 글

이 책은 하제소프트가 윈도우 개발자들에게 유용한 윈도우 드라이버 개발 노하우를 듬뿍 담아 내놓은 책이다. 지금껏 출간된 드라이버와 관련된 책 중에서 기본편과 응용편을 나눠 이처럼 자세히 설명하는 경우는 거의 없었던 만큼, 이 책을 통해 많은 개발자들이 디스크 드라이버, 오디오 드라이버, PCIe 드라이버 등 윈도우용 드라이버를 개발할 때 유용할 지식을 많이 얻을 뿐만 아니라, 특별히 개발 기간도 단축할 수 있으리라 믿는다.
- 송태훈 / (주)휴인스 대표이사, 공학 박사

15년 이상을 알고 지낸 이 책의 저자는 국내에서 USB 관련 최고의 실무형 전문가로 휴대폰 제조사들과 다양한 솔루션을 개발해왔다. 이 책은 저자의 오랜 경험과 노하우뿐 아니라 여기에 기본 원리까지 충실하게 담아낸 것으로, 전문가로 가고자 하는 엔지니어에게 많은 도움이 될 수 있는 책으로서 추천하고 싶다.
- 신태식 / 엠케어시스(주) 대표이사

윈도우 디바이스 드라이버를 개발하는 일은 여전히 쉽지 않고 많은 지식과 경험을 필요로 하는 작업이다. 또한 윈도우의 버전이 올라갈수록 개선되는 부분도 있지만 과거의 개발지식을 기반으로 하기 때문에 새로운 개발자가 윈도우 디바이스 드라이버를 개발하는 것은 생각보다는 쉬운 일은 아니다. 그런 면에서 하제소프트의 이봉석 대표님만큼 오랜 기간 동안 윈도우 디바이스 드라이버 개발과 관련되어 일을 하신 분도 드물고 오랜 경험을 가지고 계신 분이 업계에는 많지 않다는 것이 사실이다. 그래서 그 동안의 경험을 기반으로 작성하신 책이 이번에 출간된다는 소식을 듣고 저 또한 흥분을 감추지 못했다.

윈도우는 가장 많이 범용 디바이스 드라이버를 지원하는 운영체제로서 수년을 걸쳐 발전을 해왔다. 독자들은 WDM, WDF부터 최근에 I2C BUS를 사용하는 장치의 드라이버까지 이 책에 모두 언급되어 있기 때문에 그 동안 디바이스 드라이버 개발에 대한 역사까지도 볼 수 있는 좋은 기회가 될 것으로 확신한다.

응용 프로그램의 상위 개발 기술을 익히는 것도 중요하지만 여전히 한국에서는 제조업 기반의 하드웨어 개발과 생산이 주요 경쟁력이 있는 시장구조로 되어 있다. 그런 면에서 하드웨어를 제어하고 윈도우의 커널과 연결작업에 대한 지식을 보유하는 것은 생각보다 뛰어난 경쟁력을 확보하는 것일 수 있다.

디바이스 드라이버의 일반적인 개발에 대해 궁금한 개발자를 비롯해 전문적인 디바이스를 개발 및 테스트하시는 분들에게는 또 다른 바이블과 같은 책이 될 것이라 믿는다.

또한 이 책에서 언급된 장치유형 외에도 많은 장치유형의 하드웨어가 시장에 더 빨리 출시가 되는 데에 분명히 이 책이 기여할 것이다. 아무쪼록 경쟁력 있고 뛰어난 윈도우 기반 장치의 개발자 분들이 이 책을 통해 시간을 절약함은 물론, 두루 안정적인 장치가 개발될 수 있기를 바라며 추천을 글을 마친다.
- 이건복 / 한국마이크로소프트 개발자 플랫폼 사업부 이사

이 책에서 다루는 내용

■ WDM(Windows Driver Model), WDF(Windows Driver Framework) 두 가지 윈도우 드라이버 개발 모델
■ ATA/SATA 인터페이스에 대한 소개와 드라이버 개발 방법
■ SCSIPORT 미니포트, STORPORT 미니포트 윈도우 드라이버 개발 방법
■ PCI Express 버스상에서 운용되는 NVMe(Non Volatile Memory Express) 스토리지 드라이버 개발 방법
■ 멀티터치 스크린, 멀티터치 패드(MultiTouch Digitizer)와 HID 인터페이스에 대한 소개 및 드라이버 개발 방법
■ I2C 버스를 사용하는 하드웨어를 위한 윈도우 8 디바이스 드라이버 개발 방법
■ 윈도우 표준 오디오 모델인 UAA(Universal Audio Architecture)에 대한 이해 및 오디오 드라이버 개발 방법
■ AVStream 모델(오디오/비디오 스트림 동시 지원 모델)
■ 윈도우가 지원하는 64비트 커널을 위한 커널 패치 가드(Kernel Patch Guard)
■ PCIe(PCI Express) 인터페이스에 대한 소개 및 MSI(Message Signal Interrupt) 인터럽트를 다루는 방법

이 책의 대상 독자

이 책을 제대로 활용하려면 가능하면 C 언어 사용에 익숙해야 한다. 또한 윈도우 시스템에 대한 관심과 특히 윈도우 커널에 대한 기본 지식이 있어야 책이 주려는 정보를 최대한 얻어갈 수 있다.

멀티터치, 디스크(스토리지), 오디오, PCIe 등의 하드웨어를 다루고 있거나 다뤄야 하는 독자들이라면 이 책을 통해 매우 유용한 정보를 얻을 수 있다.

이 책의 구성

이 책은 크게 두 부분으로 나뉜다. 하나는 기본편으로, 디바이스 드라이버 개발에 처음 입문하는 독자들이 먼저 읽어봐야 내용을 다룬다. 나머지 하나는 실무에서 장치유형별로 디바이스 드라이버를 개발하는 개발자들이 읽으면 도움이 되는 내용으로 채워진 응용편이다.

기본편에서는 윈도우 드라이버를 처음 작성해보는 독자들이 꼭 읽어야 하는 내용을 기술하고 있다.

먼저 1장 '개발환경'에서는 윈도우 디바이스 드라이버를 개발하기 위해 필수로 익혀야 하는 개발툴을 소개한다. 그리고 2장 '드라이버의 기본'에서는 윈도우 디바이스 드라이버의 기본 개념과 WDM(Windows Driver Model), WDF(Windows Driver Framework)에 대한 간단한 소개를 한다.

이어지는 응용편에서는 실무에서 실제 하드웨어를 가지고 윈도우 운영체제에서 동작하는 디바이스 드라이버를 만들어야 하는 독자들을 위한 내용을 기술하고 있다.

3장 '디스크 디바이스 드라이버'에서는 디스크(스토리지) 디바이스 드라이버를 작성하는 방법을 소개한다. SATA(Serial ATA)와 SCSIPORT 미니포트와 STORPORT 미니포트 드라이버 작성법을 소개한다.
4장 'HID 디바이스 드라이버'에서는 터치 디지타이저(Digitizer), 마우스, 키보드 등의 HID 인터페이스 드라이버를 작성하는 방법을 소개한다. 그리고 가상 HID 드라이버를 작성하는 방법도 배운다.
5장 'I2C 드라이버'에서는 윈도우8부터 공식적으로 지원하고 있는 I2C 버스를 사용하려는 디바이스 드라이버의 작성 방법을 소개한다.
6장 '오디오 디바이스 드라이버'는 윈도우에서 오디오 디바이스 드라이버를 작성하는 방법을 소개한다. COM(Component Object Model)과 AVStream 모델에 대해서도 소개하고 있다.
7장 '커널 코드 가로채기'에서는 윈도우에서 커널 코드를 가로채는 기본적인 방법과 64비트 커널 패치 가드(Kernel Patch Guard)에 대해 소개한다.
8장 'PCI(PCIe) 디바이스 드라이버'에서는 PCI와 PCIe(PCI Express) 버스를 소개하고, 이를 사용하는 카드들을 위한 윈도우 드라이버 작성법을 소개하고 있다.

저자/역자 소개

저자 서문

시중에는 디바이스 드라이버와 관련된 책들이 이미 많이 나와 있다. 이 책들은 대부분 드라이버를 개발하는 기본 입문서 수준이며 책을 통해 디바이스 드라이버를 개발하는 방법보다는 윈도우 운영체제가 어떻게 동작하는지를 엿보는 데 목적을 두는 경우가 많다.

디바이스 드라이버와 관련된 책들이 이러한 특징을 가지는 것은 이 분야가 요구하는 개발 기술이 너무나 다양해서 한 권의 책으로 그 개발 방법을 모두 소개하기가 어렵기 때문이다.

예를 들어, 시중에 나와 있는 여러 권의 디바이스 드라이버 책을 읽었다고 하더라도 윈도우에서 동작하는 프린터 드라이버나 네트워크 드라이버를 개발하기는 쉽지 않다. 이와 같은 문제는 이런 책들이 프린터, 네트워크와 같은 장치 유형(Class) 위주의 디바이스 드라이버를 개발하는 지식을 전달하기보다 상대적으로 WDM(Windows Driver Model), WDF(Windows Driver Frameworks)와 같은 도구를 사용하는 방법을 소개하는 내용에 비중을 두고 구성되었기 때문이다. 이로 인해 이런 책들은 오히려 WDM, WDF를 잘 이해해야 개발이 가능한 드라이버들을 선정해서 독자들에게 소개하고 있다.

USB 버스를 사용하는 드라이버를 개발하려면, 보통 WDM, WDF와 같은 툴을 잘 이해해야 한다. 하지만 여기에는 놓쳐서는 안 될 한 가지 사실이 있다. 그것은 어떤 버스를 사용하는가도 중요하지만 어떤 장치 유형의 드라이버를 만들 것인가도 중요하다는 점이다.

실제로 USB 버스를 사용하는 드라이버를 WDM, WDF를 사용해서 충분히 구현할 수 있는 독자라고 할지라도, USB 버스를 사용하는 오디오 드라이버를 개발하려 한다면 상당한 당혹스러움을 경험하게 될 것이다. 윈도우에서 오디오 드라이버를 개발하려면 WDF, WDF에 대한 지식보다는 오디오 드라이버를 개발하는 데 필요한 새로운 모델 UAA(Universal Audio Architecture)를 잘 알아야 하기 때문이다. 또다시 공부해야 한다는 것이다. 마찬가지로, USB 네트워크 드라이버를 개발하려면 NDIS(Network Driver Interface Specification)라는 모델에 대해 공부해야 한다. 이와 같은 어려움이 생기는 것은 한마디로 장치 유형에 대한 지식을 따로 배워야 하기 때문이다.

이 때문에 대부분의 독자들은 인터넷을 통해 MSDN(Microsoft 개발자를 위한 사이트)을 이용함으로써 이런 장치 유형에 대한 지식을 배우려고 노력한다. 물론 경험이 많은 개발자들은 이와 같은 사이트에서 제공하는 정보만 가지고도 드라이버를 개발할 수 있지만, 그렇지 못한 개발자들이 훨씬 많은 것이 사실이다.

이런 배경에서, 이 책이 다음과 같은 독자들에게 읽혀지길 원한다.
■ 시중에서 윈도우 디바이스 드라이버와 관련된 입문서를 한두 권 정도 읽어본 경험자
■ 간단하게나마 WDM 혹은 WDF 디바이스 드라이버를 개발해본 경험이 있는 자
■ 장치 유형(Class)과 관련된 드라이버 개발 지식이 필요한 자

이 책에서 소개하는 디바이스 드라이버 장치 유형들은 실제 윈도우가 지원하는 모든 장치 유형 가운데 일부에 지나지 않는다. 하지만 이와 같이 장치 유형을 소개하는 책이 시중에 아직까지 출간되어 있는 것을 본 적이 없으므로, 틀림없이 이런 책을 필요로 하는 독자들이 많을 것이라고 믿는다. 이런 생각을 바탕으로 이러한 책을 쓰는 시도를 해보고 싶었다. 다음에 또 이와 같은 책을 집필할 시간이 주어질 수 있다면 다른 장치 유형들도 계속해서 소개해보고 싶다.

저자 소개

이봉석

현재 ㈜하제소프트 대표이사를 맡고 있다. 1998년부터 지금까지 삼성첨단기술센터, 삼성21세기아카데미, LG러닝센터 등에서 디바이스 드라이버 교육을 수행해왔으며, 청강문화산업대 컴퓨터정보과 겸임교수와 정보통신 민관합동조사단 전문가로 활동했다. 윈도우와 임베디드 시스템 운영체제가 관심 분야이며, 특히 버스 인터페이스(USB, PCI, 1394 등)와 보안 시스템에 관심이 많다. 주요 저서로는 『Windows CE 실전 가이드』(에이콘출판, 2006)를 비롯해, 『고급개발자들이 알고 있던 디바이스 드라이버 구조와 원리 그리고 제작 노하우』, 『윈도우 디바이스 드라이버』가 있다.

목차

목차
  • 1부. 기본편
  • 1장 디바이스 드라이버 기초
  • 1.1 디바이스 드라이버란?
  • 1.1.1 기본 설명
  • 1.1.2 레거시 드라이버
  • 1.1.3 PNP 드라이버
  • 1.2 개발 툴 설치
  • 1.2.1 WDK
  • 1.2.2 WDM, KMDF 그리고 UMDF
  • 1.3 개발 시작 전 검토 사항
  • 1.4 설치 파일
  • 1.4.1 Version 섹션
  • 1.4.2 SourceDisksNames 섹션
  • 1.4.3 SourceDisksFiles 섹션
  • 1.4.4 DestinationDirs 섹션
  • 1.4.5 Manufacturer 섹션
  • 1.4.6 Strings 섹션
  • 1.4.7 Models 섹션
  • 1.4.8 DDInstall 섹션
  • 1.5 WDK 빌드
  • 1.5.1 WDK 7600 콘솔 빌드 환경
  • 1.5.2 WDK 8 Visual Studio 빌드 환경
  • 1.6 디버깅 툴
  • 1.6.1 DebugView
  • 1.6.2 WinDBG

  • 2장 드라이버의 기본
  • 2.1 디바이스 스택
  • 2.2 WDM(Windows Driver Model)
  • 2.2.1 IRP(IO Request Packet)
  • 2.2.2 필수 루틴
  • 2.2.3 WDM 드라이버 보충 기술
  • 2.2.4 WDM 드라이버 샘플 분석
  • 2.3 WDF(Windows Driver Foundation) – KMDF
  • 2.3.1 WDF 프레임워크
  • 2.3.2 WDF 오브젝트
  • 2.3.3 Event 함수들
  • 2.3.4 WDF(KMDF) 드라이버 샘플 분석


  • 2부. 응용편
  • 3장 디스크 드라이버
  • 3.1 디스크 드라이버를 만들기 위해서 알아야 하는 것
  • 3.1.1 디스크 드라이버를 만들어서 무엇을 할 수 있을까?
  • 3.1.2 WDK
  • 3.2 SATA(Serial ATA)에 대한 소개
  • 3.2.1 SATA 개념
  • 3.2.2 AHCI 에 대해서
  • 3.2.3 NCQ(Native Command Queue)
  • 3.3 NVMe(Non Volatile Memory Express)에 대한 소개
  • 3.4 윈도우 스토리지 드라이버 모델
  • 3.4.1 SCSI 미니포트 드라이버
  • 3.4.2 Scsi 미니포트 드라이버 샘플 분석
  • 3.4.3 Storport 미니포트 드라이버
  • 3.5 윈도우 애플리케이션과 패스 스루 인터페이스
  • 3.6 MS WDK가 제공하는 AHCI SATA 호스트 컨트롤러 드라이버
  • 3.6.1 ATAPort 미니포트 드라이버 의 주요 콜백함수소개
  • 3.6.2 마이크로소프트 SATA 미니포트 드라이버 샘플 예제 분석
  • 3.6.3 드라이버 설치
  • 3.6.4 윈도우 응용프로그램과 패스 스루 인터페이스(ATA)
  • 3.7 NVMe Evaluation 드라이버
  • 3.8 스토리지 클래스 드라이버
  • 3.8.1 파일시스템 볼륨과 스토리지 볼륨
  • 3.8.2 디스크 드라이버와 스토리지 볼륨
  • 3.8.3 디스크 스토리지 클래스 드라이버

  • 4장 HID 디바이스 드라이버
  • 4.1 HID드라이버를 만들기 위해서 알아야 하는 것
  • 4.1.1 HID드라이버를 만들어서 무엇을 할 수 있을까?
  • 4.1.2 WDK
  • 4.2 HID에 대한 소개
  • 4.2.1 HID 관계도를 이해하자
  • 4.2.2 HID 애플리케이션 컬렉션과 윈도우 장치 열거
  • 4.2.3 HID 디스크립터
  • 4.2.4 리포트 디스크립터
  • 4.2.5 아이템의 이해
  • 4.2.6 아이템의 인코딩
  • 4.2.6.1 짧은 인코딩
  • 4.2.6.2 긴 인코딩
  • 4.2.7 리포트 리스크럽터의 예제
  • 4.3 윈도우 HID 클래스 디바이스
  • 4.3.1 HIDCLASS.SYS 라이브러리와 미니드라이버
  • 4.3.2 HID 응용프로그램 라이브러리
  • 4.4 디바이스드라이버실습
  • 4.4.1 드라이버샘플 빌드, 설치
  • 4.4.2 응용프로그램 테스트
  • 4.4.3 응용프로그램 주요 설명
  • 4.4.4 드라이버 주요 소스 설명
  • 4.5 HID 하위 프로토콜
  • 4.5.1 HID Over USB
  • 4.5.2 HID Over I2C
  • 4.6 맺음말

  • 5장 I2C 드라이버
  • 5.1 I2C 클라이언트 드라이버를 만들기 위해 알아야 하는 것
  • 5.1.1 I2C 클라이언트 드라이버를 만들어서 무엇을 할 수 있을까
  • 5.1.2 WDK
  • 5.2 I2C에 대한 소개
  • 5.2.1 I2C 관계도를 이해하자
  • 5.2.2 I2C 기본 통신규약
  • 5.3 윈도우8과 I2C 버스
  • 5.3.1 ACPI와 I2C
  • 5.3.2 SPB 프레임워크
  • 5.4 디바이스 드라이버 실습
  • 5.4.1 솔루션 빌드
  • 5.4.2 설치 파일 분석
  • 5.4.3 응용프로그램, 드라이버 주요 소스 분석
  • 5.5 참고 사이트 정보

  • 6장 오디오 드라이버
  • 6.1 오디오 드라이버를 만들기 위한 준비
  • 6.1.1 오디오 드라이버를 만들어서 무엇을 할 수 있을까
  • 6.1.2 WDK
  • 6.1.3 내가 부족한 것은 무엇인가
  • 6.2 본격적으로 공부해보자
  • 6.2.1 C++ 과 COM 인터페이스에 대한 간단한 학습
  • 6.2.2 WDK 문서를 통한 학습
  • 6.3 간단한 오디오 드라이버를 만들자
  • 6.3.1 간단한 오디오 드라이버를 설치하기 위한 설치파일구성(INF)
  • 6.3.2 간단한 오디오 드라이버를 빌드하기 위한 파일구성
  • 6.3.3 간단한 오디오 드라이버 빌드, 설치 및 운용
  • 6.3.4 간단한 오디오 드라이버 중요 코드 분석
  • 6.4 AVSteam 드라이버 모델 소개
  • 6.4.1 AVStream 객체 계층도와 필터 생성
  • 6.4.2 필터중심/핀중심 AVStream 드라이버 개발 방법
  • 6.4.2.1 필터 중심 드라이버의 Process 콜백 함수
  • 6.4.2.2 핀 중심 드라이버의 Process 콜백 함수

  • 7장 커널 코드 가로채기
  • 7.1 코드 가로채기의 이해
  • 7.2 예재 보안솔루션 소개
  • 7.2.1 커널 스트림의 가로챌 위치를 결정한다
  • 7.2.2 커널 스트림 코드를 찾자
  • 7.2.3 커널스트림코드를 가로채는 코드를 심자
  • 7.2.4 후커의 내용을 살펴보자
  • 7.3 64비트 환경에서 구현하는데 필요한 요소
  • 7.3.1 PG 무력화
  • 7.3.2 64비트 어셈블리어 환경과 콜링 컨벤션
  • 7.4 소스 설명, 솔루션 빌드 및 사용 방법
  • 7.4.1 드라이버 소스 설명
  • 7.4.2 응용프로그램 소스 설명
  • 7.4.3 64비트 환경에서 드라이버 동작하기
  • 7.4.4 테스트

  • 8장 PCI(PCIe) 디바이스 드라이버
  • 8.1 PCI 버스와 PCIe 버스에 대한 소개
  • 8.1.1 PCI버스
  • 8.1.2 PCIe 버스
  • 8.2 윈도우 와 PCI(PCIe) 버스
  • 8.3 PCI 디바이스 드라이버의 기본 구조
  • 8.3.1 PCI 디바이스 드라이버 작성자가 자주 사용하는 운영체제 제공 함수
  • 8.3.2 설치 파일에서 고려할 부분
  • 8.3.3 리소스 다루기
  • 8.4 WDM PCI 샘플 드라이버 소개
  • 8.4.1 PCI 샘플 드라이버 설치와 테스트 응용프로그램 실행
  • 8.4.2 PCI 샘플 드라이버 소스 분석
  • 8.5 사용자 레벨에서 PCI 디바이스 다루기(DM-II 소개)

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안