목차
서문 = xv
당신은 누구인가? = xv
용어 = xvi
코딩 형태 = xvii
수정된 소스 파일 = xvii
도움을 주신 분들 = xvii
Chapter 1 소개
윈도우즈 드라이버 모델 = 2
WDM과 NT 형태 드라이버 = 3
드라이버 사용 준비 = 4
부록 CD-ROM = 5
디바이스 드라이버 소프트웨어 도구 = 5
다루어지지 않는 드라이버 형태 = 6
새로운 사고의 틀 = 6
디바이스 드라이버 환경 = 7
용어와 자원 = 8
Win32 프로그램 인터페이스 = 9
기본 입출력 = 9
환경 = 10
디바이스 세부 사항 제한 = 10
드라이버로의 다른 Win32 처리 = 11
결론 = 12
Chapter 2 구성도
디바이스 드라이버 요소들 = 14
드라이버 엔트리 포인트와 콜백 = 15
디스패치 루틴 = 17
디바이스의 생성 = 18
하드웨어 자원 할당 = 18
다른 디바이스의 호출 = 19
연속적인 하드웨어 처리 = 19
하드웨어와의 통신 = 20
하드웨어 문제 = 21
전원관리 = 21
윈도우즈 관리 명령 = 22
NT 이벤트 보고 = 22
시스템 스레드 = 22
디바이스 드라이버의 형태 = 22
윈도우즈 개요 = 22
입출력 요구 처리 = 23
플러그 앤 플레이 스택 = 25
표준 버스와 클래스 드라이버 = 26
드라이버 스택의 예 = 28
드라이버의 선택 = 29
기존 드라이버 = 29
표준 드라이버 = 29
운영 시스템 = 30
계층화된 디바이스 드라이버 = 30
단일 드라이버 = 30
요구되거나 선택적인 사항 = 31
WDM 원리 = 31
코어 모델 = 31
복잡성 = 32
플러그 앤 플레이와 계층 = 32
기능의 범위 = 33
개발 환경 = 33
개발자 지원 = 33
결론 = 34
Chapter 3 디바이스 드라이버 설계
소개 = 35
드라이버 설계 가이드 = 35
문서 제공 = 36
바람직한 설계 = 36
커널 호출 = 38
커널 객체 = 40
드라이버 루틴 명 = 40
프로세서 모델 = 41
프로세서 모델 = 41
인터럽트 레벨 = 42
메모리의 사용 = 44
풀메모리 = 44
룩어사이드 리스트 = 45
다른 메모리의 고려 = 46
사용자 메모리의 접근 = 46
DMA = 47
IRP 처리 = 47
IRP 매개변수 = 48
드라이버 스택상의 IRP 수행 = 49
결론 = 50
Chapter 4 WDM 디바이스 환경
시스템 구성 = 54
DDKs = 54
부록 소프트웨어 설치 = 55
단축 아이콘 = 56
유틸리티 = 57
도스 박스 = 57
컴퓨터 관리 콘솔 = 58
NT 디바이스 애플릿 = 58
하드웨어 마법사 = 58
레지스터리 에디터 = 58
INF 에디터 = 59
WBEM = 59
디버거 = 59
NT와 Win2000 유틸리티 = 59
부록 소프트웨어 도구 = 60
드라이버 대상 = 60
드라이버 언어와 라이브러리 = 61
자원 = 62
바람직한 코드 = 62
build 유틸리티 = 62
매이크 파일 = 63
SOURCES = 64
매이크 파일 File = 64
build 디렉토리 = 65
다른 build 단계 = 66
DIRS 파일 = 67
VC++ 프로젝트 = 67
Makefile 구성 환경 = 68
MakeDrvr = 68
디렉토리 = 69
공통적인 작업 = 70
Wdm1 드라이버 코드 = 70
컴파일러 옵션 = 71
헤더 파일 = 72
드라이버 엔트리 모듈 = 72
버전 자원 = 74
레지스터리 수행 = 74
Wdm1 설치 = 78
설치 상세 사항 = 79
INF 파일 = 79
레지스터리 = 79
Win2000 객체 = 80
디바이스와 드라이버 관리 = 80
디바이스의 추가 = 80
디바이스의 제거 = 81
드라이버 업-데이트 = 81
NT 형태 드라이버 = 81
결론 = 82
Chapter 5 디바이스 인터페이스
디바이스들 = 111
디바이스 접근 = 112
서브 입출력 = 113
디바이스 객체와 디바이스 확장 = 113
디바이스 객체의 생성과 삭제 = 114
디바이스 생성 = 116
디바이스 삭제 = 117
디바이스명 = 118
Symbolic Links = 118
디바이스 인터페이스 = 120
Wdm1 디바이스 인터페이스 = 120
Win32 디바이스 인터페이스 접근 = 124
디바이스의 인터페이스 명 획득 = 124
Wdm1 Test 실행 = 127
결론 = 129
Chapter 6 테스트와 디버깅
테스트, 테스트, 테스트 = 137
드라이버 테스트 = 138
모든 함수가 적절히 동작하는가를 확인할 것 = 139
Win2000과 Win98 = 139
다중 처리기 = 140
입출력 취소 = 140
디버깅 = 140
어떻게 상황이 악화되는가? = 141
디버깅 테크닉 = 143
단계적인 개발 = 143
Checked 버전 = 143
Win2000 혹은 Win98 = 144
디버깅 도구 = 144
Win2000 이벤트 = 145
추적 도구 = 145
드라이버 검증 = 145
디버거 = 146
DebugPrint = 146
DebugPrint 출력시도 = 146
DebugPrint Monitor 사용 = 148
DebugPrint 드라이버 사용 = 148
디버깅 노트 = 150
드라이버 업-데이트 = 150
부팅할 때에 드라이버 실패 = 151
드라이버 의존도 = 151
Uncanceled IRPs = 152
Bugcheck 코드 = 152
Bugcheck는 어디서 일어나는가? = 154
결론 = 156
Chapter 7 디스패치
디스패치 루틴 IRP = 157
입출력 요구 패키 (IRP) = 158
디스패치 루틴 처리 = 158
재진입 = 159
IRP 처리 = 160
IRP 완료 = 161
IRP 구조 = 161
입출력 스택영역 = 163
공통 IRP 매개인자 = 164
IRP 생성, IRP_MJ_CREATE = 164
Close IRP, IRP_MJ_CLOSE = 164
Read IRP, IRP_MJ_READ = 165
Write IRP, IRP_MJ_WRITE = 165
IOCTL IRP, IRP_MJ_DEVICE_CONTROL = 165
사용자 버퍼 = 165
버퍼화 입출력 = 166
직접 입출력 = 166
Neither = 166
DeviceIoControl Buffers = 166
Wdm1 디스패치 루틴 = 167
생성과 폐쇄 = 169
쓰기 = 169
Read = 172
IOCTL = 172
System Control = 173
결론 = 173
Chapter 8 PnP와 디바이스 스택
설계 개요 = 176
설계 목적 = 176
PnP 시스템 = 177
PnP 메시지 = 182
디바이스 Enumeration = 185
고정 그리고 구성 가능 디바이스 = 185
Enumeration = 186
디바이스 트리 = 187
디바이스 스택 = 188
PnP 지원과 디바이스 스택 = 188
디바이스 객체 = 189
상위 경계 = 190
USB 키보드 예제 = 190
Functional and Physical 디바이스 객체 = 192
상위 경계 정의 = 193
결론 = 194
Chapter 9 PnP 적용
PnP 적용 = 195
디바이스의 추가와 제거 = 196
기본적인 PnP 핸들러 = 197
지원되지 않는 IRP를 스택 하부로 전송하기 = 202
PnP 상태와 메시지 = 203
상태 플러그 = 203
IRP 유지 = 206
핸들 개방 = 206
PnP IRP를 수행해야 하는 경우 = 208
디바이스 잠금 = 212
자원 할당 획득 = 217
Wdm2 테스트 = 224
실제 PnP 메시지 = 225
다른 PnP IRP = 226
IRP_MN_DEVICE_USAGE_NOTIFICATION = 226
IRP_MN_FILTER_RESOURCE_REQUIREMENTS = 226
IRP_MN_QUERY_BUS_INFORMATION = 226
IRP_MN_QUERY_CAPABILITIES = 226
IRP_MN_QUERY_DEVICE_RELATIONS = 226
IRP_MN_QUERY_DEVICE_TEXT = 227
IRP_MN_QUERY_ID = 227
IRP_MN_QUERY_INTERFACE = 227
IRP_MN_QUERY_PNP_DEVICE_STATE = 227
IRP_MN_QUERY_RESOURCE_REQUIREMENTS = 228
IRP_MN_QUERY_RESOURCES = 228
IRP_MN_READ_CONFIG = 228
IRP_MN_SET_LOCK = 228
IRP_MN_WRITE_CONFIG = 229
PnP 통보 = 229
Win32 PnP 통보 = 229
디바이스 드라이버 PnP 통보 = 234
통보 요구 드라이버 상호 작용 = 235
고급 PnP = 235
버스 드라이버 = 235
PnP IRP 전송 = 238
디바이스 특성 = 238
결론 = 238
Chapter 10 전원 관리
전원 개념 = 239
ACPI = 240
Win32 전원관리 = 240
Wdm2 Power 응용 프로그램 = 241
배터리 미니-클래스 드라이버 = 242
시스템 전원정책 = 242
시스템과 디바이스 상태 = 243
전원 IRP = 245
전원 IRP = 245
전원 IRP 수행하지 않기 = 248
디바이스 전원정책 소유자 = 249
Set Power IRP 처리 = 251
시스템 전원상태 설정 = 251
디바이스 전원상태 설정 = 257
SetPowerState = 258
디스패치 루틴 전원 핸들링 = 259
Wdm2 전원관리 능력 테스트 = 260
디바이스 기능 = 261
향상된 전원관리 = 263
Wake = 263
전원 Sequence = 263
시스템 전원 차단 이벤트 중지 = 263
전원 통보 = 264
시스템 전원상태 변화 감지 = 264
WMI 지원 = 264
결론 = 266
Chapter 11 설치
WDM 드라이버 설치 과정 = 267
INF 파일 = 268
표준 문구 = 269
스트링 = 271
INF 문구 계층 구조 = 271
Wdm1Free.INF = 273
InfEdit = 277
Cross-Platform과 WDM INF 파일 = 278
Win2000에서의 Wdm1 설치 = 279
드라이버 위치 선정 = 281
하드웨어 ID = 282
호환 ID = 283
반복 계수 = 283
NT 형태 드라이버 설치 = 284
설치 과정 = 285
드라이버 구동 순서 = 286
NT 4 제어판 디바이스 애플릿 = 287
Win2000 디바이스 관리 = 287
Win98 디바이스 관리 = 289
REG 파일 = 289
Win98에서의 NT 형태 드라이버 설치 = 289
결론 = 291
Chapter 12 윈도우즈 관리 명령
개관 = 302
WBEM 모델 = 303
WDM 공급기 = 304
WMI 드라이버 = 306
WMI 구성 환경 = 308
WMI 데이터 공급기 등록 = 310
시스템 제어 IRP 조작 = 312
Query WmiRegInfo 핸들러 = 314
Query WmiDataBlock 핸들러 = 314
SetWmiDataBlock 핸들러 = 317
SetWmiDataItem 핸들러 = 319
ExecuteWmi메소드 핸들러 = 320
WMI 이벤트 = 320
동작중인 WMI = 322
결론 = 323
Chapter 13 이벤트 보고
개관 = 325
메시지 파일 = 327
이벤트 소스 등록 = 330
이벤트 생성 = 331
Wdm3 이벤트 테스트 = 335
결론 = 335
Chapter 14 DebugPrint
설계 요구 사항 = 338
설계 적용 = 338
테스트 드라이버 코드 = 339
시스템 스레드 = 340
이벤트 = 343
동기화 = 344
추적 이벤트 생성 = 347
링크 리스트 = 349
최종 마무리 = 352
DebugPrint 드라이버 = 353
설계 = 354
DebugPrint 디바이스 = 354
읽기 큐 = 355
IRP 취소 = 358
쓰기 알고리즘 = 360
읽기 알고리즘 = 362
DebugPrint Monitor = 363
설계 = 363
Win32 작업자 스레드 = 364
DebugPrint_Event 클래스 = 365
Win32 중첩 입출력 = 366
결론 = 369
Chapter 15 WdmIo와 PHDIo 드라이버
Win32 인터페이스 = 372
IOCTL = 373
명령 = 373
LPT 프린터 드라이버 프로그램 = 374
병렬 포트 = 374
WdmIo 테스트 = 376
PHDIo 테스트 = 376
명령 수행 = 377
인터럽트 구동 입출력을 사용한 데이터 쓰기 = 379
인터럽트 구동 입출력을 이용한 데이터 읽기 = 384
WdmIo 테스트 = 384
WdmIo 설치 = 384
LogConfig 문구 = 385
WdmIoTest 실행 = 387
PHDIo 테스트 = 387
PHDIo 설치 = 387
PHDIoTest 실행 = 388
WdmIo/PHDIo 분석 = 389
사용해야 할 것들 = 389
결함 = 389
결론 = 390
Chapter 16 하드웨어 입출력 큐 조작
하드웨어 접근 = 394
IRP 큐 조작 = 396
디바이스 큐 = 396
StartIo 루틴 = 397
명령 처리 = 401
임계 영역 = 401
IRP의 큐 저장 취소 = 402
큐에 저장된 IRP의 취소 = 402
WdmIo IRP 취소 = 403
취소 대한 = 405
Cleanup IRP 취소 = 406
테스트, 취소 그리고 Cleanup = 408
부가 디바이스 큐 = 410
부가 디바이스 큐 적용 = 411
결론 = 415
Chapter 17 인터럽트 실행 입출력
인터럽트 처리 = 417
위험한 특성 = 418
인터럽트 접속 = 420
WdmIo 읽기/쓰기 = 422
시작 요청 = 423
인터럽트 핸들러 = 425
Deferred Procedure Calls = 427
기본적인 DPC = 428
사용자 정의 DPC = 430
타이머 = 431
1초 구간 타이머 = 431
WdmIo 타임 - 아웃 = 432
사용자 정의 타이머 = 433
결론 = 434
Chapter 18 NT 하드웨어
NT 형태 드라이버 구성 = 436
DDK 쟁점 = 436
컴파일 환경 = 436
NT 형태 드라이버 구조 = 437
드라이버 생성과 제거 = 437
자원 요구 = 440
자원의 변환 = 448
자원의 발견 = 450
자동 감지 하드웨어 = 450
구성 가능한 버스 문의 = 454
최종 자원 발견 기술 = 454
결론 = 455
Chapter 19 WDM 시스템 드라이버
클라이언트 드라이버 제작 = 458
공통 디바이스 = 459
필터 드라이버 = 459
NT 계층 구현 = 460
병렬 포트 드라이버 = 460
결론 = 461
Chapter 20 Universal Serial Bus
디바이스 클래스 = 464
Human Input Devices(HID) = 464
개념 = 465
윈도우즈 USB 드라이버 인터페이스 = 466
전송 형태 = 466
USB 하위 레벨 구조 = 467
USB 디바이스 = 467
USB 신호 = 468
버스 신호 인가 = 469
하위 레벨 프로토콜 = 469
전송 = 470
전원 = 471
USB 디바이스 하부 구조 = 471
버스 열거 = 472
표준 제어 전송 = 473
서술자 = 475
드라이버 설치 = 476
USB 클래스 = 476
새로운 특성 = 478
클라이언트 설계 = 479
종결점 형태 선택 = 479
Isochronous 디바이스 = 480
결론 = 482
Chapter 21 USB 드라이버 인터페이스
USB 클라이언트 설계 = 485
UsbKbd 사용 = 486
UsbKbd 설치 = 487
헤더와 라이브러리 = 488
USB IOCTL = 489
URB = 489
USBDI 호출 = 491
USB와의 통신 = 495
USB 디바이스 초기화 = 495
URB 제공 = 497
인터페이스 선택 = 499
그 외 설치 = 502
Configuration 선택 해제 = 502
인터럽트 전송 = 502
제어 전송 = 506
기타 사항 제공 = 508
UsbKbd 테스트 = 508
USBDI 구조 기준 = 512
구조 = 513
USBDI URB 참조 = 516
URB 설정 함수 = 516
URB 전송 함수 = 518
URB 기본 파이프 함수 = 520
USB Isochronous 프레임 함수 = 521
결론 = 522
Chapter 22 Human Input Device Model
HID에 숨겨진 특성 = 523
원도우즈에서의 HID = 524
HID 모델 = 525
리포트 = 526
용도 = 527
HID 능력 획득 = 529
HID 모델 표현 = 530
HID 서술자 = 530
디바이스 속성 = 531
리포트 서술자 = 531
결론 = 540
Chapter 23 HID 클라이언트
HID 클래스 드라이버 = 542
HID 클래스 드라이버 특성 = 542
윈도우즈 HID 클라이언트 = 543
헤더 파일 = 544
HID USB 미니-드라이버 = 545
USB 부트 디바이스 = 546
사용자 모드 HID 클라이언트 = 546
HID 디바이스 탐색 = 547
HID 기능 획득 = 548
입력 리포트 읽기 = 553
출력 리포트 전송 = 557
그 외의 사용자 모드 HID 클라이언트 함수 = 559
HidKbdUser 실행 = 559
커널 모드 HID 클라이언트 = 562
클라이언트 형태 = 563
PnP 통보 = 564
HidKbd 디바이스 = 566
HID 기능 획득 = 572
HidKbd 디바이스 개방과 폐쇄 = 574
데이터 읽기 / 쓰기 = 757
이외의 HID 클래스 IOCTL = 581
결론 = 581
부록 A 정보 = 583
뉴스 그룹과 메일링 리스트 = 586
문헌 = 586
부록 B PC 99 = 587
드라이버 = 587
요구사항 = 588
IBM 호환 PC = 589
변화 추세 = 592
ACPI, OnNow, 플러그 앤 플레이 = 593
PC 99 적합성 = 594
부록 C Direct Memory Access = 595
Glossary = 597
찾아보기 = 603