book.jayu.org
WDF

WDF

Penny Orwick (지은이), Guy Smith (지은이), Carol Buchmiller (지은이), Annie Pearson (지은이), 김점갑 (옮긴이), 최장욱 (옮긴이)

에이콘출판·2008-01-07

  • 936쪽
  • 기술과학
  • KDC 005.43

로그인하면 내 서재에 추가할 수 있어요.

알라딘에서 보기

책 소개

윈도우 드라이버 개발자라면 누구나 WDF로 단기간에 고품질의 드라이버를 개발할 수 있다 - Nar Ganapathy, 마이크로소프트 사 윈도우 디바이스 익스피리언스 그룹 아키텍트 수 년 동안 소프트웨어 개발자들이 마이크로소프트 윈도우 운영체제에서 동작하는 드라이버를 구현하는 것은 매우 도전적인 일이었다. 최근까지도 윈도우 드라이버 모델(WDM, Windows Driver Model)은 배우기가 힘들어 비교적 적은 그룹의 전문화된 개발자들만이 제한된 드라이버를 개발할 뿐이었다. WDF는 안정된 윈도우 드라이버를 더 쉽게 구현하고 더 쉽게 배울 수 있는 드라이버 모델을 제공한다. WDF는 WDM을 대부분 대체하고 개발자가 운영체제의 복잡성보다는 제어해야 할 하드웨어의 요구 사항에만 집중하게 설계됐다. WDF는 이전에 커널 모드의 드라이버를 필요로 했던 주요 장치에 대해 유저 모드에서 동작하는 드라이버를 만들 수 있는 기능을 지원함으로써 시스템의 안정성을 향상시킨다. WDF 프로그래밍 모델을 이용하면 대부분의 이벤트 처리는 WDF가 담당함으로써 개발자는 간단하지만 기능을 갖춘 드라이버를 단기간에 구현할 수 있다. 개발자는 이때부터 드라이버가 처리할 이벤트를 조금씩 늘려가면서 드라이버의 완전한 기능을 갖출 수 있다. 이 책은 윈도우 드라이버 개발에 관심 있거나 이전에 드라이버를 개발해 본 경험이 없는 소프트웨어 프로그래머에게 WDF를 소개하기 위해 설계됐다. 또한 WDF 구조를 설계하고 프레임워크를 만들고 프로그래머를 가이드할 예제 드라이버를 개발한 마이크로소프트 WDF 개발 팀의 파트너십 아래 작성됐다. WDF 구조와 프로그래밍 모델이라는 수준 높은 토론에서 시작하지만 이 책의 대부분은 예제를 통해 윈도우 드라이버 개발에 필요한 WDF 프레임워크를 소개할 수 있도록 실용적으로 고안됐다. ★ 이 책에서 다루는 내용 ★ ▶ WDF를 사용한 커널 모드나 유저 모드 드라이버 개발 ▶ 최소의 코드로 플러그앤플레이와 전원 관리 지원이 가능한 드라이버 개발 ▶ 견고한 I/O 핸들링 코드 구현 ▶ 동기화와 병행성의 효과적인 관리 ▶ 프로토콜과 시리얼 버스 기반의 디바이스에 대한 유저 모드 드라이버 개발 ▶ USB 디바이스를 신속하게 개발하기 위한 프레임워크의 USB 기능 사용법 ▶ DMA 디바이스를 위한 커널 모드 드라이버 설계와 구현 ▶ 소스 코드 분석과 정적 검증 툴을 이용한 드라이버 평가 ▶ 드라이버 테스트와 디버그, 설치에 적용할 최고 프랙티스 기법 ★ 이 책의 대상 ★ 윈도우 드라이버 구현에 흥미가 있으며, C 또는 C++ 언어를 사용하는 프로그래밍에 기초가 있는 개발자를 대상으로 한다. ■ WDF를 사용해 드라이버 구현 방법을 배우는 데 관심이 있는 드라이버 개발자: 경험이 있는 드라이버 개발자라면 새로운 모델에 쉽게 적응할 것이다. 하지만 WDF 유저 모드 드라이버는 COM 기반이라서 필요한 COM 프로그래밍에 대한 기본적인 소개를 한다. ■ 드라이버 개발을 시작하고자 하는 애플리케이션 개발자: WDF는 이전의 드라이버 모델(WDM)보다 쉽게 배울 수 있지만 애플리케이션은 드라이버, 특히 커널 모드 드라이버와는 많은 측면에서 매우 다르다. 윈도우 드라이버의 구조와 동작의 이해를 돕기 위해 기본적인 배경 정보를 제공한다. 이 배경 정보는 드라이버 개발에 대해 언급할 때 계속 사용된다. ■ 드라이버와 장치가 어떻게 연동하는지를 이해하고자 하는 하드웨어 엔지니어: WDF의 빠른 프로토타이핑(prototyping) 기능과 쉽게 배울 수 있는 기능을 통해 초기 하드웨어에서 구동할 드라이버를 만들어야 하는 엔지니어는 WDF 모델이 매우 유용하다는 것을 알 수 있을 것이다. WDF에서 유저 모드 드라이버를 개발하려면 C++를 이해해야 하지만 커널 모드 드라이버는 항상 C로 작성된다. 두 언어 중에 하나라도 능숙하지 않다면 이 언어와 관련된 책을 참조해야 한다. C와 C++를 숙지하고 윈도우 프로그래밍에 익숙해졌다면 이 책은 WDF 드라이버를 시작하는 데 필요한 개념, 가이드라인, 프로그래밍 예제, 팁을 제공한다. ★ 이 책의 구성 ★ 1부: 1부에서는 툴과 리소스, 윈도우 운영체제의 기본, 드라이버 개념, WDF 개론을 소개한다. 2부: WDF의 두 프레임워크는 매우 유사하지만 동일하지는 않다. 각 프레임워크는 장단점을 가진다. 2부에서는 프레임워크를 자세히 살펴볼 것이다. 3부: WDF 프레임워크의 구조와 구성 요소를 확실하게 이해했으므로 개발하는 동안 시간과 열정이 훨씬 많이 소비되는 윈도우 드라이버의 세부 사항을 살펴보자. 3부에서는 중요한 개념과 실제 상황에 대해 개괄적으로 소개한다. 4부: 사실상 커널 모드 드라이버는 윈도우 운영체제의 일부분이므로 유저 모드 드라이버와 관계없는 추가적인 복잡한 내용을 다루어야 한다. KMDF는 하드웨어 인터럽트와 다이렉트 메모리 액세스 같은 미묘한 사항을 다룰 필요도 있다. UMDF 드라이버의 경우 COM 오브젝트를 사용하고 구현하는 방법을 이해해야 한다. 4부에서는 이 주제를 심도 있게 살펴본다. 5부: 드라이버는 드라이버 개발을 위해 고안된 기술과 툴로써 빌드되고 테스트, 디버깅, 설치된다. 표준 툴뿐만 아니라 WDF는 견고한 WDF 드라이버를 쉽게 만들 수 있는 검증, 테스팅, 디버깅용 툴을 포함하고 있다. 마이크로소프트 윈도우의 핵심 커널 구성 요소를 소유하면 으레 뒤따르는 특권(또는 지저분한 일) 중의 하나는 그 구성 요소 내에서 발생하는 많은 운영체제 크래쉬를 분석해야 한다는 것이다. 필자는 I/O 매니저의 주인으로서 드라이버와 관련된 많은 문제를 디버깅할 기회가 있었고 이러한 크래쉬로부터 많은 것을 배웠다. 크래쉬 덤프를 디버깅하면서 패턴들이 나타나기 시작했다. 크래쉬를 야기하는 이런 문제를 완전히 이해하기 위해 저장 매체, 오디오, 디스플레이와 같은 다양한 장치 스택과 USB, 1394 같은 상호 연결체를 더 잘 이해해야 할 필요성을 절감했다. 그래서 윈도우 부서의 디바이스 팀 개발 리더와 드라이버 스택 검토를 시작했다. 많은 검토를 거친 후 기존 드라이버 모델이 너무나도 복잡하다는 결론을 내렸다. 마이크로소프트 사는 알맞은 추상화를 하지 않았고 드라이버 개발자에게 너무나도 많은 짐을 안겼다. 윈도우 드라이버 모델(WDM)은 14년 이상 개발에 사용되고 있다. WDM은 매우 유연하고 다양한 디바이스를 지원하지만 너무 로우레벨의 추상화를 제공한다. 윈도우 커널을 아주 깊이 이해하거나 커널 개발자들과 인연이 닿은 아주 극소수의 개발자만이 WDM을 사용했다. 현재 대부분 드라이버 개발자들은 WDM을 사용하지 않는 실정이다. 규칙이 너무 많아 이해하기도 어렵고 명확히 묘사하기도 매우 힘들었다. 플러그앤플레이와 전원 관리 지원과 같은 기본적 운영체제 기능은 윈도우 I/O 서브시스템과 잘 통합되지 않았는데, 그 이유는 플러그앤플레이 장치와 비 플러그앤플레이 장치를 동시에 수행시킬 수 있기를 원했기 때문이다. 이것은 결국 I/O 요청과 플러그앤플레이, 전원 이벤트를 동기화시켜야하는 커다란 짐을 드라이버로 떠넘기게 운영체제 설계를 몰고 갔음을 의미했다. 동기화 규칙은 복잡하고, 이해하기 어려우며, 잘 문서화돼 있지도 않다. 게다가 비동기, 취소 가능한 I/O는 초기의 운영체제(최초의 NT)부터 지원되게 설계됐지만 대부분의 드라이버는 이를 잘 처리하지 못했다. 이러한 결론이 직관적으로 명료해 보이지만 이를 검증하기 위해서는 외부 자료가 필요했다. 따라서 마이크로소프트 윈도우 XP에 온라인 크래쉬 분석(OCA)이 가능한 윈도우 에러 리포팅(WER)이라는 매우 뛰어난 기능을 포함시켰다. 윈도우가 예상치 않게 멈출 때 블루스크린상에 에러 메시지를 표시하고 시스템은 크래쉬에 대한 미니 덤프를 생성한다. 이 미니 덤프는 사용자가 크래쉬 자료를 마이크로소프트에게 보내기를 선택할 때 마이크로소프트에서 받을 수 있다. 크래쉬의 높은 빈도를 보고 드라이버 개발 방법에 대한 기본적인 변화가 필요하다는 것을 느꼈다. 드라이버 모델을 간단히 하기 위한 제안을 제시하고 우리가 발견한 사실을 입증하기 위해 조사를 한 후 여러 드라이버 개발자와 직접 마주 앉아 회의를 했다. 이러한 토론은 놀…

목차펼치기

1부 _ WDF 시작 1 01장 WDF 소개 3 이 책에 관해 4 이 책의 대상 독자 4 1부 소개: WDF 시작 5 2부 소개: 프레임워크 살펴보기 5 3부 소개: WDF 기본 적용 6 4부 소개: KMDF 드라이버의 다양한 주제 8 5부 소개: WDF 드라이버 빌드와 설치, 테스트 9 이 책에서 사용한 규약 10 드라이버 개발 시작 11 드라이버 개발에 필요한 시스템 요구 사항 12 WDK의 구입과 설치 13 WDK 라이브러리 14 WDK 문서 14 WDK 툴 15 WDK 샘플 16 윈도우 체크드 빌드 구하기 17 디버깅 툴 구하기 18 OSR 교육 장치 19 중요 정보 출처 20 중요한 참고 사항 22 02장 윈도우 드라이버 기본 23 드라이버란 무엇인가? 24 핵심 윈도우 구조 25 드라이버 아키텍처 27 커널 오브젝트와 데이터 구조체 31 윈도우 I/O 모델 31 I/O 요청 32 디바이스 스택이 IRP를 처리하는 방법 33 데이터 버퍼와 I/O 전송 형태 34 디바이스와의 데이터 송수신 방법 35 플러그앤플레이와 전원 관리 36 커널 모드 프로그래밍 기초 36 인터럽트와 IRQL 37 병행성과 동기화 39 메모리 41 커널 모드 프로그래밍 팁 44 기본 용어 46 03장 WDF의 기본 51 WDF와 WDM 52 WDF는 무엇인가? 52 WDF 오브젝트 모델 54 프로그래밍 인터페이스 54 오브젝트 계층 55 병행성과 동기화 55 I/O 모델 56 I/O 요청 취소 56 I/O 타깃 57 치명적이지 않은 에러를 처리하는 방법 58 플러그앤플레이와 전원 관리 59 보안 61 안전한 디폴트 62 인자 검증 62 WDF 검증과 트레이싱, 디버깅 지원 63 사용성과 버전 규칙 63 2부 _ 프레임워크 살펴보기 04장 드라이버 프레임워크 개관 67 프레임워크: 개요 67 UMDF 개요 68 UMDF 프레임워크 오브젝트 69 UMDF 콜백 오브젝트 70 KMDF 개요 71 KMDF 오브젝트 72 KMDF 콜백 함수 73 WDF 아키텍처 73 UMDF 인프라 76 UMDF 인프라 구성 요소 77 UMDF 드라이버의 치명적 에러 80 전형적인 UMDF I/O 요청 80 KMDF 인프라 81 KMDF 인프라 구성 요소 82 KMDF 드라이버의 치명적 에러 83 전형적 KMDF I/O 요청 84 WDF에서 디바이스와 드라이버 지원 84 UMDF 지원 디바이스 85 KMDF 지원 디바이스 88 적절한 프레임워크 선택하기 89 05장 WDF 오브젝트 모델 91 오브젝트 모델 개요 92 메소드와 프로퍼티, 이벤트 92 이벤트 콜백 93 오브젝트 속성 94 오브젝트 계층과 생명 주기 94 오브젝트 컨텍스트 95 UMDF 오브젝트 모델 구현 95 UMDF 이름 규약 95 UMDF 프레임워크 오브젝트와 인터페이스 97 UMDF 드라이버 콜백 오브젝트와 인터페이스 99 UMDF 예제: 오브젝트와 콜백 인터페이스 100 KMDF 오브젝트 모델 구현 101 KMDF 오브젝트 유형 102 KMDF 이름 규약 104 오브젝트 생성 105 UMDF 오브젝트 생성 105 KMDF 오브젝트 생성 106 오브젝트 계층과 생명 주기 109 UMDF 오브젝트 계층 111 KMDF 오브젝트 계층 113 오브젝트 삭제 114 오브젝트 컨텍스트 영역 122 UMDF 오브젝트 컨텍스트 데이터 122 KMDF 오브젝트의 컨텍스트 영역 126 06장 드라이버 구조와 초기화 129 필요한 드라이버 구성 요소 130 UMDF 드라이버 구조와 요구 사항 130 KMDF 드라이버 구조와 요구 사항 133 드라이버 오브젝트 135 UMDF 드라이버 콜백 오브젝트 생성 135 KMDF 드라이버 오브젝트 생성 137 디바이스 오브젝트 140 디바이스 오브젝트의 유형 140 WDF 드라이버와 드라이버 유형, 디바이스 오브젝트 유형 144 디바이스 프로퍼티 145 디바이스 오브젝트 초기화 146 큐와 기타 지원 오브젝트 147 디바이스 인터페이스 148 UMDF 디바이스 오브젝트 생성과 초기화 149 디바이스 콜백 오브젝트 생성 150 프레임워크 디바이스 오브젝트 생성과 초기화 150 UMDF 예제: 디바이스 인터페이스 152 KMDF 디바이스 오브젝트 생성과 초기화 152 KMDF 디바이스 초기화 구조체 153 디바이스 오브젝트 컨텍스트 영역 154 KMDF 디바이스 오브젝트 생성 155 EvtDriverDeviceAdd의 부가적인 작업 155 KMDF 예제: EvtDriverDeviceAdd 콜백 함수 156 자식 디바이스 열거(KMDF PDO만 해당됨) 158 버스 드라이버의 정적 열거와 동적 열거 158 PDO 종속적 초기화 159 KMDF 드라이버의 디바이스 네이밍 기법 160 네임드 디바이스 오브젝트 160 보안 디스크립터 161 3부 _ WDF 기본 적용 07장 플러그앤플레이와 전원 관리 165 플러그앤플레이와 전원 관리 소개 166 플러그앤플레이에 관해 167 전원 상태에 관해 168 전원 정책에 관해 170 WDF에서 플러그앤플레이와 전원 관리 지원 170 플러그앤플레이와 전원 관리의 디폴트 기능 170 I/O 큐와 전원 관리 171 플러그앤플레이와 전원 이벤트 콜백 172 유휴와 웨이크 지원(KMDF에만 해당) 173 파워 페이지블과 넌파워 페이지블 드라이버 174 플러그앤플레이와 전원 관리 콜백 순서 176 디바이스 열거와 시작 179 디바이스 파워다운과 제거 183 서프라이즈 리무브 186 WDF 드라이버에서 플러그앤플레이와 전원 관리 구현 방법 188 소프트웨어 전용 드라이버에서 플러그앤플레이와 전원 관리 189 UMDF 예제: 소프트웨어 전용 필터 드라이버에서 플러그앤플레이 190 KMDF 예제: 소프트웨어 전용 필터 드라이버에서 플러그앤플레이 191 소프트웨어 전용 드라이버에서 프레임워크의 역할 193 간단한 하드웨어 드라이버에서 플러그앤플레이와 전원 관리 194 디바이스 파워업 초기화와 파워다운 해체 작업 194 하드웨어 펑션 드라이버에서 큐의 전원 관리 195 UMDF 예제: 프로토콜 펑션 드라이버에서 플러그앤플레이와 전원 코드 196 KMDF 예제: 간단한 하드웨어 펑션 드라이버에서 플러그앤플레이와 파워 코드 201 간단한 하드웨어 펑션 드라이버에서 프레임워크의 역할 205 KMDF 드라이버의 고급 전원 관리 207 KMDF 드라이버의 디바이스 파워다운 유휴 지원 207 KMDF 드라이버에서 디바이스 웨이크 지원 212 KMDF 예제: 디바이스 유휴와 웨이크 지원 217 디바이스 유휴를 지원하는 프레임워크의 동작 220 디바이스 웨이크를 지원하는 프레임워크의 동작 220 08장 I/O 흐름과 전달 223 일반 I/O 요청 유형 224 생성 요청 224 클린업과 닫기 요청 225 읽기와 쓰기 요청 226 디바이스 I/O 컨트롤 요청 226 I/O 요청 유형 요약 227 I/O 전송 유형 228 버퍼드 I/O 230 다이렉트 I/O 230 버퍼드 I/O도 아니고 다이렉트 I/O도 아님 231 I/O 요청 흐름 232 UMDF 디바이스 스택을 경유하는 I/O 요청 경로 234 KMDF 드라이버를 경유하는 I/O 요청 경로 236 I/O 완료 처리 238 프레임워크 내에서 I/O 요청 흐름 239 I/…

출처: 국립중앙도서관 서지정보

리뷰 남기기

로그인하면 리뷰를 남길 수 있어요.

리뷰 0개

아직 리뷰가 없어요.