Top

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

  • 지은이이봉석
  • ISBN : 9791161752686
  • 48,000원
  • 2019년 02월 28일 펴냄
  • 페이퍼백 | 800쪽 | 188*235mm
  • 시리즈 : 임베디드 시스템

책 소개

소스 코드 파일은 여기에서 내려 받으실 수 있습니다.

요약

윈도우 디바이스 드라이버를 처음 개발하려는 독자들과 실무에서 필요로 하는 디바이스 드라이버를 개발하는 데 도움이 되는 지식을 얻고자 하는 독자들을 위해서 작성됐다. 이 책은 크게 디바이스 드라이버 개발에 처음 입문할 때 꼭 읽어봐야 할 부분인 기본편(1장과 2장)과 실무에서 장치유형별(디스크, HID, I2C, 오디오, 콜백 주소 테이블 가로채기, PCIe, 오토 마우스와 오토 키보드) 디바이스 드라이버를 개발하는 개발자들을 위한 응용편(3장부터 9장까지), 두 부분으로 나뉜다. 따라서 디바이스 드라이버 개발에 처음 입문하는 독자들이나 실무에서 실제 하드웨어를 가지고 윈도우 운영체제에서 동작하는 디바이스 드라이버를 만들어야 하는 독자 모두를 만족시킬 수 있는 책이 될 것이다. 2판에서는 기존 윈도우 8 기반의 내용을 윈도우 10으로 업데이트하는 등 1판 내용을 최신 버전에 맞춰 수정하고 설명을 추가했다.

추천의 글

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

- 송태훈 / (주)휴인스 대표이사, 공학 박사

15년 이상을 알고 지낸 이 책의 저자는 국내에서 USB 관련 최고의 실무형 전문가로 휴대폰 제조사들과 다양한 솔루션을 개발해왔다. 이 책은 저자의 오랜 경험과 노하우뿐 아니라 기본 원리까지 충실하게 담아냈다. 전문가로 나아가려는 엔지니어에게 많은 도움이 될 수 있는 책이라 추천하고 싶다.

- 신태식 / 엠케어시스(주) 대표이사

윈도우 디바이스 드라이버를 개발하는 일은 여전히 쉽지 않고 많은 지식과 경험을 필요로 하는 작업이다. 또한 윈도우의 버전이 올라갈수록 개선되는 부분도 있지만 과거의 개발 지식을 기반으로 하기 때문에 새로운 개발자가 윈도우 디바이스 드라이버를 개발하는 것은 생각보다 쉬운 일이 아니다. 그런 면에서 하제소프트의 이봉석 대표님만큼 오랜 기간 동안 윈도우 디바이스 드라이버 개발과 관련된 일을 하신 분도 드물고 오랜 세월의 경험을 지닌 분이 업계에는 많지 않은 것이 사실이다. 그래서 그동안의 경험을 기반으로 집필한 책이 이번에 출간된다는 소식을 듣고 나 또한 흥분을 감추지 못했다.
윈도우는 범용 디바이스 드라이버를 가장 많이 지원하는 운영체제로 수년에 걸쳐 발전을 해왔다. WDM, WDF부터 최근 I2C 버스를 사용하는 장치의 드라이버까지 이 책에 모두 언급돼 있기 때문에 독자들은 디바이스 드라이버 개발에 대한 역사까지도 볼 수 있는 좋은 기회가 될 것으로 확신한다.
응용프로그램의 상위 개발 기술을 익히는 것도 중요하지만 여전히 한국에서는 제조업 기반의 하드웨어 개발과 생산이 핵심 경쟁력을 가진 시장 구조를 유지하고 있다. 그런 면에서 하드웨어를 제어하고 윈도우의 커널과 연결하는 작업에 대한 지식을 보유하는 것은 생각보다 뛰어난 경쟁력을 확보하는 것일 수 있다.
디바이스 드라이버의 일반적인 개발에 대해 궁금한 개발자를 비롯해 전문적인 디바이스를 개발 및 테스트하시는 분들에게는 또 다른 바이블과 같은 책이 될 것이라 믿는다.
또한 이 책에서 언급된 장치 유형 외에도 많은 장치 유형의 하드웨어가 시장에 더 빨리 출시되는 데 분명히 이 책이 기여할 것이다. 아무쪼록 경쟁력을 가진 뛰어난 윈도우 기반 장치의 개발자 분들이 이 책을 통해 시간을 절약함은 물론, 두루 안정적인 장치가 개발될 수 있기를 바란다.

- 이건복 / 한국마이크로소프트 개발자 플랫폼 사업부 이사

이 책에서 다루는 내용

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

이 책의 대상 독자

이 책을 제대로 활용하려면 가능하면 C 언어 사용에 익숙해야 한다. 또한 윈도우 시스템에 대한 관심과 특히 윈도우 커널에 대한 기본 지식이 있어야 책에서 제공하는 정보를 최대한 얻어갈 수 있다.
멀티터치, 디스크(스토리지), 오디오, PCIe 등의 하드웨어를 다루고 있거나 다뤄야 하는 독자들이라면 이 책을 통해 매우 유용한 정보를 얻을 수 있다.

저자/역자 소개

지은이의 말

우선 이 책을 통해서 처음 저자의 이름을 듣게 되는 독자들을 위해서 간단히 내 소개를 먼저 하는 것이 맞는 순서인 듯하다.
나는 1990년 3월, Microsoft DOS(MS-DOS)부터 사용해왔다. 지금의 내 상황이 과거에 예상했던 미래는 분명 아니다. 미래의 나는 ‘로보트 태권브이’를 만드는 일을 하고 있을 줄 알았다. 그런 생각을 하면서 학부 시절을 보냈기 때문에, 당시 ‘전자계산학과’라는 학과에서는 전혀 가르쳐주지 않는 내용들에 대한 해답을 항상 찾아 다니면서 공부했던 기억이 난다.
전산과 조교보다는 전자과 조교를 찾아 다니면서 공부했으며, 어셈블리어, 마이크로 프로세서, 컴퓨터 아키텍처, 전자공학 등을 거의 미친듯이 공부했던 기억이 난다. 내가 왜 전자계산학과를 갔을까 하는 의구심까지 들 정도로 말이다.
엄밀하게 말해서 지금 하고 있는 일이 내가 정말로 원했던 일은 아니지만, 비슷한 일을 하고 있다고는 말할 수 있다. 하드웨어(로봇)를 구동하는 데 필요한 소프트웨어, 그것도 비교적 로우 레벨(Low Level) 수준으로 작성된 소프트웨어를 작성하고 있기 때문이다.
지금 생각해보면, 나는 로봇을 만드는 일이 아니라, 하드웨어를 구동하는 방법 그 자체에 매력을 느꼈던 것이 분명하다.

‘어떻게 하면 저 하드웨어의 효율을 최대한 살리면서 구동할 수 있을까?’

이것이 지금 내가 하고 있는 대부분의 일의 목표가 됐다.

서론이 조금 장황했던 것 같다. 세 가지 이야기만 하고 싶다.
우선 이 책의 신뢰성에 대한 이야기를 해야겠다.
나는 28년 가까이 디바이스 드라이버라고 부르는 분야에서 소위 전문가라는 이야기를 들으면서 수많은 강의를 해왔으며, 지금도 코딩과 설계, 디버깅을 하고 있는 개발자다.
회사를 운영하는 입장에서 아무래도 마이크로소프트가 가장 많은 수입원을 제공해 왔기 때문에 가장 많은 기술을 보유하고 있는 분야도 역시 마이크로소프트와 따로 떼어내어 생각할 수 없다. 자연스럽게 윈도우 쪽 기술에 의존하고 있는 셈이다. 물론 최근 안드로이드나 리눅스 쪽의 시장이 요구되면서부터 조금씩 해당 운영체제의 지식을 습득하는 과정 중에 있지만, 이 기술이 언제 회사 수입에 도움이 될지는 모르겠다.

다음은 나의 전문 분야다.

윈도우 디바이스 드라이버, USB 하드웨어 설계 및 프로토콜, PCI, PCI Express 트랜잭션, 리눅스 커널포팅 및 디바이스 드라이버, VxWorks 플랫폼 포팅, 안드로이드 플랫폼 포팅, 윈도우 CE 포팅

이런 분야에서는 지금까지도 개발을 하고 있는 입장이니, 이 책에 기술하는 내용들을 충분히 신뢰해도 좋다는 이야기를 하고 싶다.
서문을 쓰고 있는 지금도, 내 책상의 한편에는 WinDBG(윈디버거)로 연결된 타겟 컴퓨터, Cypress FX3 개발보드, Trace32 JTAG 디버거, USB 시리얼 포트, 제조사 카메라 장치, 별도 전원 공급을 위한 파워서플라이 등이 올려져 있다. 서문을 작성하고 나면 또 일을 해야 한다. 난 개발자다. 이 책은 개발자를 위한 책이다.

두 번째로 꼭 이야기해주고 싶은 말은 항상 강의 때마다 학생들에게 해줬던 이야기다.

“시간이 아무리 없더라도 꼭 한번쯤은 내려갈 때까지 내려갔다가 올라오기를 바란다.” “자신이 할 수 있는 한 가장 아래까지 내려가본 개발자는 새로운 분야의 기술을 습득하는 데 있어, 도약하는 속도가 훨씬 빠르다.”

이런 이야기를 하면, 조금 생각이 있는 학생들의 대답은 늘 “그럴 시간이 없어요.”였다. 맞다! 그럴 시간이 없다. 최소한 일하는 시간 동안에는 말이다. 개인 여가 시간까지 소비하면서 공부를 해야 한다는 이야기를 할 수밖에 없는데, 현대 사회에서는 50대에도 공부를 해야 하는 것이 당연하다고 생각한다면, 개인 여가 시간을 공부하는 데 사용하라는 이야기를 할 수밖에 없다. 직장인들은 회사에서 일하고, 자기 시간을 조금이라도 가져보려고 하지만 여의치 않을 것이다. 그래도 시간을 만들어서라도 공부해야 한다. 최소한 이런 종류의 책을 찾아보려는 독자들이라면, 제발 한 번만이라도 깊이 내려갔다가 올라오는 공부를 해보면 좋겠다. 도약 속도가 정말 빠를 것이다.

마지막으로 이 책을 활용하는 방법에 대해서 이야기를 해주고 싶다.
이 책은 다음과 같은 생각을 바탕으로 서술했다는 점을 기억해주길 바란다.

  1. 무엇을 개발해야 하는지 정한다.
  2. 그것을 개발하기 위해서 무엇을 준비해야 하는지 확인한다.
  3. 어떤 자료들을 참고할 수 있는지 확인한다.
  4. 샘플 코드를 꼭 빌드해서 먼저 동작시켜 본 후, 코드를 한 줄 한 줄 내 것으로 만들어본다.

이 책을 다 읽은 독자들은 새로운 분야의 디바이스 드라이버를 개발해야 할 때, 어떤 방법으로 접근해야 하는지 알 수 있기를 희망한다.
그리고 꼭 샘플 소스를 읽어봐야 한다. 가능하면 실시간 디버거를 사용하던지, 디버그 메시지를 활용해서라도 코드의 동작을 확인해야 한다. 이 책이 정말도 필요한 독자들에게 도움이 됐으면 좋겠다.
시간이 허락되는 한, 유튜브를 통해서 다양한 드라이버와 관련된 동영상을 올릴 예정이니, 꼭 확인해 보기 바란다.

지은이 소개

이봉석

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

목차

목차
  • 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.4.8.1 DDInstall 섹션 지시자
  • 1.4.8.2 DDInstall.Service 섹션
  • 1.5 빌드
  • 1.5.1 WDK 7600 콘솔 빌드 환경
  • 1.5.2 EWDK 빌드 환경
  • 1.6 디버깅 툴
  • 1.6.1 DebugView.
  • 1.6.1.1 DebugView 사용하기
  • 1.6.1.2 DebugView와 디버그 로그 출력조건
  • 1.6.2 WinDBG
  • 1.6.2.1 타겟 PC 설정
  • 1.6.2.2 디버깅 PC 설정
  • 1.6.2.3 메모리 덤프 파일을 통한 WinDBG 연결하기
  • 1.6.2.4 WinDBG 프로그램 체험하기
  • 1.7 WHQL 소개
  • 1.7.1 회사 인증서 준비과정
  • 1.7.2 대시보드 가입
  • 1.7.3 WHCK 프로그램 참여
  • 1.7.4 WHLK 프로그램 참여

  • 2장. 드라이버의 기본
  • 2.1 디바이스 스택
  • 2.2 WDM
  • 2.2.1 IRP
  • 2.2.1.1 IOSTACKLOCATION.
  • 2.2.1.2 IRP 완료
  • 2.2.2 필수 루틴
  • 2.2.2.1 DriverEntry
  • 2.2.2.2 AddDevice.
  • 2.2.2.3 PlugNPlayDispatch.
  • 2.2.2.4 PowerDispatch
  • 2.2.2.5 DriverUnload
  • 2.2.3 WDM 드라이버 보충 기술
  • 2.2.3.1 IoSkipCurrentIrpStackLocation
  • 2.2.3.2 완료 루틴
  • 2.2.3.3 IRQL
  • 2.2.3.4 핸들과 프로세스
  • 2.2.4 WDM 드라이버 샘플 분석
  • 2.2.4.1 드라이버 빌드, 설치 및 응용프로그램 실행
  • 2.3 WDF: KMDF
  • 2.3.1 WDF 프레임워크
  • 2.3.2 WDF 오브젝트
  • 2.3.2.1 WdfDriver
  • 2.3.2.2 WdfDevice
  • 2.3.2.3 WdfRequest
  • 2.3.2.4 WdfQueue
  • 2.3.3 이벤트 함수들
  • 2.3.3.1 DRIVER_INITIALIZE
  • 2.3.3.2 EVTWDFDRIVERDEVICEADD
  • 2.3.3.3 EVTWDFDEVICEPREPAREHARDWARE
  • 2.3.3.4 EVTWDFIOQUEUEIO_READ
  • 2.3.3.5 EVTWDFIOQUEUEIO_WRITE.
  • 2.3.3.6 EVTWDFIOQUEUEIODEVICECONTROL.
  • 2.3.4 WDF(KMDF) 드라이버 샘플 분석
  • 2.3.4.1 드라이버 빌드, 설치 및 응용프로그램 실행
  • 2.3.4.2 드라이버 소스 설명

  • 2부. 응용편
  • 3장. 디스크 디바이스 드라이버
  • 3.1 디스크 드라이버를 만들기 위해 알아야 하는 것
  • 3.1.1 디스크 드라이버를 만들어서 무엇을 할 수 있을까
  • 3.1.2 WDK
  • 3.2 SATA에 대한 소개
  • 3.2.1 SATA의 개념
  • 3.2.2 AHCI의 이해
  • 3.2.3 NCQ.
  • 3.3 NVMe에 대한 소개
  • 3.4 윈도우 스토리지 드라이버 모델
  • 3.4.1 SCSI 미니포트 드라이버
  • 3.4.1.1 DriverEntry: 디바이스 드라이버 로딩 시기에 호출된다
  • 3.4.1.2 Callback HwScsiFindAdapter: 발견된 장치 검증을 위해 호출된다
  • 3.4.1.3 Callback HwScsiInitialize: 발견된 장치의 초기화를 위해 호출된다
  • 3.4.1.4 Callback HwScsiInterrupt: 인터럽트 서비스 루틴의 역할을 담당한다
  • 3.4.1.5 Callback HwScsiReset: 발견된 장치의 초기화를 위해 호출된다
  • 3.4.1.6 Callback HwScsiAdapterControl: 사전에 정의된 특별한 목적을 위해 호출된다
  • 3.4.1.7 Callback HwScsiStartIo: 모든 SCSI Request 명령어가 전달된다
  • 3.4.2 SCSI 미니포트 드라이버 샘플 분석
  • 3.4.2.1 드라이버 빌드와 설치 방법
  • 3.4.2.2 HwScsiStartIo() 콜백 함수의 주요 동작 코드 분석
  • 3.4.3 Storport 미니포트 드라이버
  • 3.4.3.1 SCSI 미니포트 드라이버와 구분되는 특징
  • 3.4.3.2 Storport 미니포트 드라이버에서 변경된 콜백 함수
  • 3.4.3.3 Storport 미니포트 드라이버와 스핀락
  • 3.4.3.4 Storport 미니포트 드라이버 샘플 분석
  • 3.5 윈도우 애플리케이션과 패스 스루 인터페이스
  • 3.6 MS WDK가 제공하는 AHCI SATA 호스트 컨트롤러 드라이버3.6.1 Ataport 미니포트 드라이버의 주요 콜백 함수 소개
  • 3.6.2 마이크로소프트 SATA 미니포트 드라이버 샘플 예제 분석309
  • 3.6.2.1 DriverEntry에서 하는 일
  • 3.6.2.2 AhciChannelInitRoutine
  • 3.6.2.3 AhciHwBuildIo
  • 3.6.2.4 AhciHwStartIo
  • 3.6.2.5 AhciHwInterrupt
  • 3.6.3 드라이버 설치
  • 3.6.4 윈도우 응용프로그램과 패스 스루 인터페이스(ATA)
  • 3.7 NVMe 평가판 드라이버
  • 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.5.1 Input, Output 그리고 Feature Report
  • 4.2.5.2 Report Size, Report Count
  • 4.2.5.3 Usage, Usage 페이지
  • 4.2.5.4 Logical Minimum, Logical Maximum.
  • 4.2.5.5 Usage Minimum, Usage Maximum
  • 4.2.5.6 Physical Minimum, Maximum, Unit Exponent, Unit
  • 4.2.5.7 리포트 ID
  • 4.2.6 아이템의 인코딩
  • 4.2.6.1 짧은 인코딩
  • 4.2.6.2 긴 인코딩
  • 4.2.7 리포트 디스크립터의 예제
  • 4.3 윈도우 HID 클래스 디바이스
  • 4.3.1 HIDCLASS.SYS 라이브러리와 미니드라이버
  • 4.3.1.1 미니드라이버 AddDevice 콜백 함수 처리부
  • 4.3.1.2 미니드라이버 IRPMJPNP, POWER 콜백 함수 처리부
  • 4.3.1.3 미니드라이버 IRPMJINTERNALDEVICECONTROL 콜백 함수 처리부
  • 4.3.2 HID 응용프로그램 라이브러리
  • 4.3.2.1 Input Report, Feature Report의 실제 의미
  • 4.3.2.2 응용프로그램에서 HID 클래스 사용하기
  • 4.4 디바이스 드라이버 실습
  • 4.4.1 드라이버 샘플 빌드와 설치
  • 4.4.1.1 DEVCON.EXE 빌드하기
  • 4.4.1.2 HIDSAMPLE 샘플 드라이버 빌드
  • 4.4.1.3 HIDSAMPLE 드라이버 설치하기
  • 4.4.2 응용프로그램 테스트
  • 4.4.3 응용프로그램 주요 설명
  • 4.4.3.1 HID 애플리케이션 컬렉션을 검색하는 부분
  • 4.4.3.2 검색된 애플리케이션 컬렉션을 열어서 정보를 가져오는 부분
  • 4.4.4 드라이버 주요 소스 설명
  • 4.4.4.1 리포트 디스크립터를 정의하는 부분
  • 4.4.4.2 HID 디스크립터를 정의하는 부분
  • 4.4.4.3 DriverEntry
  • 4.4.4.4 HIDSAMPLE_AddDevice
  • 4.4.4.5 IRPMJPOWER IRP 명령어 콜백 함수
  • 4.4.4.6 IRPMJPNP IRP 명령어 콜백 함수
  • 4.4.4.7 IRPMJINTERNALDEVICECONTROL IRP 명령어 콜백 함수
  • 4.5 HID 하위 프로토콜
  • 4.5.1 HID Over USB
  • 4.5.1.1 열거
  • 4.5.1.2 HID 리퀘스트
  • 4.5.2 HID Over I2C
  • 4.5.2.1 열거
  • 4.5.2.2 HID 리퀘스트
  • 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 윈도우와 I2C 버스.
  • 5.3.1 ACPI와 I2C
  • 5.3.1.1 DSDT
  • 5.3.1.2 I2C 호스트 컨트롤러, I2C 터치패드를 서술하는 DSDT 예시
  • 5.3.1.3 ACPI 이름 오브젝트와 윈도우
  • 5.3.2 SPB 프레임워크
  • 5.3.2.1 I2C 호스트 컨트롤러 드라이버(SPB 컨트롤러 드라이버)
  • 5.3.2.2 I2C 클라이언트 드라이버(SPB 주변 디바이스 드라이버)
  • 5.4 디바이스 드라이버 실습
  • 5.4.1 솔루션 빌드
  • 5.4.2 설치 파일 분석
  • 5.4.3 응용프로그램, 드라이버 주요 소스 분석
  • 5.4.3.1 driver.cpp의 DriverEntry
  • 5.4.3.2 driver.cpp의 OnDeviceAdd
  • 5.4.3.3 device.cpp의 OnPrepareHardware
  • 5.4.3.4 device.cpp의 OnIoDeviceControl
  • 5.4.3.5 peripheral.cpp의 SpbPeripheralWriteRead 내부 함수
  • 5.5 참고 사이트 정보

  • 6장. 오디오 디바이스 드라이버
  • 6.1 오디오 드라이버를 만들기 위한 준비
  • 6.1.1 오디오 드라이버를 만들어서 무엇을 할 수 있을까
  • 6.1.2 WDK
  • 6.1.3 내가 부족한 것은 무엇인가
  • 6.1.3.1 프로그래밍 언어에 대한 경험(C 언어)
  • 6.1.3.2 프로그래밍 언어에 대한 추가적인 경험(C++ 언어)
  • 6.1.3.3 COM에 대한 이해
  • 6.1.3.4 WDM 윈도우 커널 레벨 드라이버에 대한 이해
  • 6.1.3.5 개발자로서의 마음가짐
  • 6.2 본격적으로 공부해보자
  • 6.2.1 C++과 COM 인터페이스에 대한 간단한 학습
  • 6.2.1.1 간단한 COM 인터페이스 정의와 구현
  • 6.2.1.2 2개의 COM 인터페이스 정의문과 클래스 정의 및 구현
  • 6.2.1.3 AddRef( ) 함수와 Release( ) 함수
  • 6.2.1.4 오디오 드라이버 COM 인터페이스의 최상위 인터페이스(IUnknown)
  • 6.2.1.5 인터페이스 간의 상속과 클래스 정의
  • 6.2.2 WDK 문서를 통한 학습
  • 6.2.2.1 WDK에서 소개하는 오디오 드라이버 계층도
  • 6.2.2.2 어떤 포트 필터를 선택할 것인가
  • 6.2.2.3 토폴로지를 작성한다
  • 6.2.2.4 핀이 다룰 스트림 데이터 포맷을 결정한다
  • 6.2.2.5 필터의 개념이 아닌, 드라이버 입장에서의 소개
  • 6.2.2.6 핀 팩토리
  • 6.2.2.7 WaveXxx 필터와 토폴로지 필터
  • 6.2.2.8 토폴로지 필터를 위한 토폴로지 구조도 예시
  • 6.2.2.9 오디오 드라이버를 작성하는 데 사용되는 COM 인터페이스
  • 6.2.2.10 COM 인터페이스를 상속받아 정의하는 오디오 드라이버 클래스의 예
  • 6.2.2.11 오디오 드라이버 동작 흐름
  • 6.3 간단한 오디오 드라이버를 만들자
  • 6.3.1 간단한 오디오 드라이버를 설치하기 위한 설치 파일 구성(INF)
  • 6.3.2 간단한 오디오 드라이버를 빌드하기 위한 파일 구성
  • 6.3.3 간단한 오디오 드라이버의 빌드, 설치, 운용
  • 6.3.4 간단한 오디오 드라이버 중요 코드 분석
  • 6.4 AVStream 드라이버 모델 소개
  • 6.4.1 AVStream 객체 계층도와 필터 생성
  • 6.4.2 필터 중심/핀 중심 AVStream 드라이버 개발 방법
  • 6.4.2.1 필터 중심 드라이버의 Process 콜백 함수
  • 6.4.2.2 핀 중심 드라이버의 Process 콜백 함수

  • 7장. 콜백주소 테이블 가로채기
  • 7.1 이 책에서 말하는 ‘가로채기’란?
  • 7.2 DRIVER_OBJECT와 드라이버 콜백 함수 테이블
  • 7.2.1 DRIVER_OBJECT와 콜백 함수들
  • 7.2.2 DRIVEROBJECT와 DEVICEOBJECT
  • 7.2.3 DRIVEROBJECT, DEVICEOBJECT 그리고 MajorFunction
  • 7.2.4 IRP와 상관없는 콜백 함수들
  • 7.2.4.1 DriverUnload 콜백 함수
  • 7.2.4.2 AddDevice 콜백 함수
  • 7.3 특정 드라이버의 동작을 감시하는 목적의 테이블 가로채기
  • 7.3.1 특정 드라이버의 DRIVER_OBJECT를 구하는 작업
  • 7.3.1.1 드라이버 이름을 사용해서 DRIVER_OBJECT를 구하기
  • 7.3.1.2 디바이스 스택의 필터를 사용해서 DRIVER_OBJECT 구하기
  • 7.3.2 DRIVER_OBJECT 테이블 가로채기
  • 7.4 개발자 전용 응용프로그램과 통신하는 채널을 만들기 위한 테이블 가로채기
  • 7.4.1 FILEOBJECT와 DEVICEOBJECT의 연결
  • 7.4.2 파일 입출력 API와 IRP
  • 7.4.3 미니포트 드라이버에서 테이블 가로채기
  • 7.4.3.1 포트 드라이버가 설정한 테이블 가로채기
  • 7.4.3.2 미니포트 드라이버를 위한 Custom DEVICE_OBJECT를 생성하기
  • 7.4.3.3 새롭게 설치된 가로채기 함수가 하는 일654
  • 7.4.3.4 IRP 후처리 가로채기
  • 7.4.3.5 그 밖에 고려할 것들
  • 7.5.1 실습 예제 확인
  • 7.5.3 설치
  • 7.5.4 테스트
  • 7.5.5 맺음말
  • 8장 PCI/PCIe 디바이스 드라이버 671
  • 8.1 PCI 버스와 PCIe 버스에 대한 소개
  • 8.1.1 PCI 버스
  • 8.1.1.1 PCI 버스 주소
  • 8.1.1.2 PCI 버스가 제공하는 명령(Function)
  • 8.1.1.3 PCI 버스 구성 과정
  • 8.1.1.4 PCI 버스와 인터럽트
  • 8.1.2 PCIe 버스
  • 8.2 윈도우와 PCI/PCIe 버스
  • 8.3 PCI 디바이스 드라이버의 기본 구조
  • 8.3.1 PCI 디바이스 드라이버 작성자가 자주 사용하는 운영체제 제공 함수
  • 8.3.2 설치 파일에서 고려할 부분
  • 8.3.3 리소스 다루기
  • 8.3.3.1 PCI BAR 주소 다루기
  • 8.3.3.2 Interrupt 처리(MSI 인터럽트).
  • 8.4 WDM PCI 샘플 드라이버 소개
  • 8.4.1 PCI 샘플 드라이버 설치와 테스트 응용프로그램 실행
  • 8.4.2 PCI 샘플 드라이버 소스 분석
  • 8.4.2.1 IOCTLPCISAMPLEREGISTERSHAREDEVENT
  • 8.4.2.2 IOCTLPCISAMPLEGETCONFIGURATIONREGISTER
  • 8.4.2.3 IOCTLPCISAMPLEMAPPING_MEMORY
  • 8.4.2.4 IOCTLPCISAMPLEUNMAPPING_MEMORY
  • 8.4.2.5 IOCTLPCISAMPLEALLOCATECONTIGUOUSMEMORYFORDMA
  • 8.4.2.6 IOCTLPCISAMPLEFREECONTIGUOUSMEMORYFORDMA

  • 9장. 오토 키보드와 오토 마우스
  • 9.1 이 책에서 말하는 ‘오토 키보드와 오토 마우스’란?
  • 9.2 예제에 포함돼 있는 프로젝트들에 대해서
  • 9.2.1 ClientIoCall 응용프로그램 예제
  • 9.2.1.1 공통코드
  • 9.2.1.2 키보드 LED 테스트1
  • 9.2.1.3 키보드 LED 테스트2
  • 9.2.1.4 마우스 좌표 테스트
  • 9.2.2 DriverApi 라이브러리 프로젝트
  • 9.2.2.1 DriverApi 라이브러리가 제공하는 API 함수 리스트
  • 9.2.2.2 DriverApi 라이브러리 코드 분석
  • 9.2.3 ClientIoDevice 드라이버 프로젝트
  • 9.2.3.1 ClientIoDevice 드라이버 설치파일
  • 9.2.3.2 ClientIoDevice 드라이버 소스파일 분석 준비
  • 9.2.3.3 ClientIoDevice 드라이버 소스파일 분석
  • 9.3 샘플 빌드

도서 오류 신고

도서 오류 신고

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

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

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