이미지 검색을 사용해 보세요
검색창 이전화면 이전화면
최근 검색어
인기 검색어

소득공제
윈도우 USB 디바이스 드라이버
WDM부터 최신 KDMF와 UMDF까지 윈도우 드라이버 모델 입문과 실전
가격
40,000
10 36,000
YES포인트?
2,000원 (5%)
5만원 이상 구매 시 2천원 추가 적립
결제혜택
카드/간편결제 혜택을 확인하세요

이미 소장하고 있다면 판매해 보세요.

  •  해외배송 가능?
  •  문화비소득공제 가능

이 분야의 이벤트

에이콘 윈도우 시스템 프로그래밍 시리즈

책소개

목차

1장 WDM 디바이스 드라이버 기초
___1.1 디바이스 드라이버 입문
______1.1.1 디바이스 드라이버의 정의
______1.1.2 추상화 인터페이스 제공
______1.1.3 디바이스 드라이버의 계층 구조
______1.1.4 디클래스 드라이버와 벤더 드라이버
___1.2 윈도우 디바이스 드라이버
______1.2.1 윈도우의 간략한 역사
______1.2.2 윈도우 비스타의 커널 구성(2가지 모드)
______1.2.3 윈도우 비스타가 지원하는 3가지 종류의 드라이버
___1.3 디바이스 드라이버 개발 입문
______1.3.1 디바이스 드라이버 실행
______1.3.2 디바이스 드라이버 개발 환경 구축
______1.3.3 WDK 폴더 구성
______1.3.4 WDK를 사용한 빌드 방법
______1.3.5 디버그 환경 구축
______1.3.6 디바이스 드라이버 프로그래밍 입문
______1.3.7 디바이스 드라이버 빌드
______1.3.8 INF 파일 작성
______1.3.9 드라이버 셋업
______1.3.10 INF 파일 구조
______1.3.11 레지스트리와 디바이스 드라이버 관련 설정
___1.4 WDM의 기본
______1.4.1 DriverEntry 함수
______1.4.2 펑션 드라이버에 등록해야 하는 함수
______1.4.3 이벤트부터 하위 드라이버와의 통신
______1.4.4 WDM의 핵이 되는 4가지 구조체
______1.4.5 메모리 할당과 해제
______1.4.6 MajorFunction 작성 방법
______1.4.7 스켈톤 드라이버 작성
___1.5 AddDevice 디바이스 초기화 처리
______1.5.1 AddDevice 함수에 작성해야 할 것
______1.5.2 AddDevice 함수 코드
______1.5.3 AddDevice 함수의 검증
___1.6 플러그앤플레이
______1.6.1 플러그앤플레이 개요
______1.6.2 플러그앤플레이 구현
______1.6.3 플러그앤플레이 검증
___1.7 전원 관리
______1.7.1 전원 관리를 구현하지 않을 경우
______1.7.2 전원 관리 처리의 개요
______1.7.3 전원 관리 처리 구현
______1.7.4 전원 관리 처리 검증
___1.8 애플리케이션에서 디바이스 제어
______1.8.1 애플리케이션에서 열기/닫기
______1.8.2 IRP_MJ_CREATE, IRP_MJ_CLOSE 처리
______1.8.3 애플리케이션에서 읽고 쓰기
______1.8.4 읽기/쓰기 검증
______1.8.5 디바이스 제어 코드 작성법
______1.8.6 디바이스 제어 코드 검증
___1.9 정리

2장 USB 저장 장치의 기초
___2.1 USB의 개요
______2.1.1 USB의 특징
______2.1.2 주소
______2.1.3 4가지 전송 방식과 엔드포인트
______2.1.4 하드웨어 개요
___2.2 USB 프로토콜 계층의 개요
______2.2.1 패킷
______2.2.2 트랜잭션
______2.2.3 각종 전송 데이터
___2.3 USB 디바이스의 구성과 디스크립터
______2.3.1 USB 디바이스의 구성
______2.3.2 리틀 엔디언
______2.3.3 디스크립터
______2.3.4 디바이스 디스크립터
______2.3.5 컨피규레이션 디스크립터
______2.3.6 인터페이스 디스크립터
______2.3.7 엔드포인트 디스크립터
______2.3.8 문자열 디스크립터
______2.3.9 디바이스 쿼리 디스크립터, 기타 속도 컨피규레이션 디스크립터
___2.4 리퀘스트
______2.4.1 GET_STATUS
______2.4.2 CLEAR_FEATURE
______2.4.3 SET_FEATURE
______2.4.4 SET_ADDRESS
______2.4.5 GET_DESCRIPTOR
______2.4.6 GET_CONFIGURATION
______2.4.7 SET_CONFIGURATION
______2.4.8 GET_INTERFACE
______2.4.9 SET_INTERFACE
______2.4.10 클래스 리퀘스트와 벤더 리퀘스트
___2.5 USB 디바이스로서의 동작
___2.6 대용량 저장 장치 클래스
______2.6.1 대용량 저장 장치 클래스의 개요
______2.6.2 CB/CBI 프로토콜
______2.6.3 벌크 전용 프로토콜
______2.6.4 디스크 접근
______2.6.5 SCSI 규격의 개요
___2.7 정리

3장 KMDF 디바이스 드라이버 개발
___3.1 KMDF 개요
______3.1.1 공통 부분의 라이브러리화
______3.1.2 KMDF의 기본 구성
______3.1.3 주요 구조체(오브젝트)
___3.2 KMDF 입문
______3.2.1 KMDF 기본 코드
______3.2.2 KMDF용 INF 파일 작성
______3.2.3 KMDF 드라이버 작성
______3.2.4 KMDF 드라이버 빌드와 실습
______3.2.5 플러그앤플레이와 전원 관리
___3.3 KMDF 드라이버의 기본 오브젝트
______3.3.1 WDF_OBJECT_ATTRIBUTES 구조체
______3.3.2 WDFQUEUE 오브젝트
______3.3.3 WDFREQUEST 오브젝트
______3.3.4 WDFFILEOBJECT 오브젝트
______3.3.5 WDFMEMORY 오브젝트
___3.4 KMDF 드라이버 개발의 기본
______3.4.1 애플리케이션에서 접근
______3.4.2 데이터 읽기/쓰기
______3.4.3 디바이스 제어
___3.5 윈도우의 USB 드라이버 개요
______3.5.1 USB 호스트 드라이버의 구조
______3.5.2 KMDF의 USB 기본 처리
___3.6 USB 디바이스의 초기화와 종료
______3.6.1 KMDF의 USB 초기화, 종료 처리
______3.6.2 컨피규레이션 디스크립터 얻기
______3.6.3 WDFUSBPIPE 오브젝트 얻기
______3.6.4 초기화와 종료 처리 코드
___3.7 USB 디바이스 제어
______3.7.1 디바이스 드라이버의 사양
______3.7.2 DeviceIoControl의 제어 코드 정의
______3.7.3 컨피규레이션 디스크립터 얻기
______3.7.4 컨피규레이션 디스크립터 확인
___3.8 클래스 리퀘스트 발행
______3.8.1 클래스 리퀘스트 발행 순서
______3.8.2 클래스 리퀘스트 발행 코드
___3.9 벌크 전송 처리
______3.9.1 벌크 전송 처리 구현 방법
______3.9.2 벌크 전송 구현
___3.10 SCSI 명령어 처리
______3.10.1 SCSI 명령어 발행
______3.10.2 INQUIRY 처리
______3.10.3 SCSI 명령어 발행 실습
___3.11 미디어 용량 측정
______3.11.1 READ_CAPACITY 처리
______3.11.2 파이프 리셋 처리
______3.11.3 REQUEST_SENSE 처리
___3.12 미디어 리더 프로그램
______3.12.1 MBR
______3.12.2 READ10 명령어로 읽기
______3.12.3 MBR 읽기 실습
___3.13 정리

4장 UMDF 디바이스 드라이버 개발
___4.1 UMDF 드라이버의 개요
______4.1.1 UMDF의 개념
______4.1.2 UMDF의 디바이스 제어 처리 흐름
______4.1.3 UMDF 드라이버 개발을 위한 준비
___4.2 DLL 개발과 설치
______4.2.1 UMDF를 설치하기 위한 INF 파일
______4.2.2 UMDF 드라이버가 DLL인 이유
______4.2.3 DLL 필수 구현 함수
______4.2.4 디버그를 위한 WPP
______4.2.5 UMDF 드라이버 스켈톤 코드
______4.2.6 UMDF 빌드 필수 파일
______4.2.7 DLL 설치
___4.3 UCOM의 기본 동작과 IDriverEntry 인터페이스
______4.3.1 COM 개론
______4.3.2 C++에서의 Interface 정의
______4.3.3 IUnknown 구현
______4.3.4 IClassFactory 구현
______4.3.5 MIDriverEntry부터 디바이스 클래스의 임시 구현
______4.3.6 COM 모듈의 동작 실습
___4.4 플러그앤플레이와 전원 관리
______4.4.1 UMDF 디바이스 드라이버의 기본 구조
______4.4.2 IPnpCallbackHardware 인터페이스
______4.4.3 IPnpCallback 인터페이스
______4.4.4 디바이스 클래스 구현
______4.4.5 디바이스 클래스 생성 코드
______4.4.6 플러그앤플레이와 전원 관리 실습
___4.5 UCOM 드라이버의 기본 제어
______4.5.1 프레임워크(I/O 관리자)의 리퀘스트에 응답
______4.5.2 애플리케이션의 접근부터 큐 클래스 구현
______4.5.3 디바이스 읽기/쓰기부터 IWDFMemory 인터페이스
______4.5.4 DeviceIoControl 함수로 제어
___4.6 디바이스의 제어 처리
______4.6.1 IWDFIoRequest와 IWDFIoTarget
______4.6.2 IWDFIoRequest::Send 함수로 디바이스 제어
______4.6.3 새 리퀘스트를 작성해 제어
___4.7 USB 디바이스 초기화
______4.7.1 UMDF의 USB 기본 처리
______4.7.2 UMDF 디바이스 드라이버의 USB 초기화
______4.7.3 초기화 처리를 위한 준비
______4.7.4 IWDFUsbTargetDevice 얻기
______4.7.5 IWDFUsbInterface 얻기
______4.7.6 IWDFUsbTargetPipe 얻기
______4.7.7 SetPipePolicy로 통신 설정
______4.7.8 USB 디바이스의 초기화와 종료 처리
______4.7.9 USB 디바이스의 초기화와 종료 처리 구현
___4.8 디바이스 드라이버의 사양
___4.9 컨피규레이션 디스크립터 얻기
______4.9.1 컨피규레이션 디스크립터를 얻는 코드
______4.9.2 OnDeviceIoControl 함수 수정
______4.9.3 컨피규레이션 디스크립터 확인
___4.10 클래스 리퀘스트 발행 처리
______4.10.1 제어 전송 처리 구현
______4.10.2 클래스 리퀘스트 발행 처리 구현
______4.10.3 OnDeviceIoControl 함수 수정
___4.11 벌크 전송 처리
______4.11.1 IRequestCallbackRequestCompletion 인터페이스 상속
______4.11.2 ForwardFormattedRequest와 OnCompletion 함수의 구현
______4.11.3 OnRead와 OnWrite 함수의 구현
______4.11.4 드라이버 빌드와 검증용 윈도우 PC에 복사
___4.12 SCSI 명령어 처리
______4.12.1 INQUIRY 명령어 확인
______4.12.2 READ_CAPACITY 명령어 확인
___4.13 미디어 리더 프로그램
___4.14 정리

부록
A 릴리즈 버전 드라이버 작성
B 64비트 PC에서 동작
___B.1 INF 파일
___B.2 64비트 환경에서 실행하는 방법
C 서명(KMCS)
D GUID 생성
E Driver Install Frameworks API 이용
F 참고 문헌

저자 소개

저자 : 하마다 켄이치로
중학교 시절 MZ-1200이란 PC를 손에 넣은 이래 베이식, 기계어, FORM, WICS 등을 경험한 후 얄팍하지만 두루두루 다양한 언어를 탐하는 어중간한 오타쿠가 됐다. 전문학교 졸업 후 시스템 하우스에 취직했으나 연필로 회로설계를 하는 것이 싫어 좌절하기도 했다. 그 후 어셈블러나 C 코딩을 하거나, VxWorks 애플리케이션, 비주얼 베이식 애플리케이션을 작성하며, 무선 제어기 수리와 영업직까지 맡고 있는 자신을 발견하고 엔지니어 길에서 벗어났다는 생각에 98년에 전직해 USB를 시작으로 임베디드 분야로 진로를 바꿨다. 정리 해고가 두려워 어느 OS벤더 회사로 전직했으나 훨씬 고수준의 업무에 늘 쫓기고 있다. 『Windows XP 디바이스 드라이버 프로그래밍 입문과 실전』(기술평론사, 2003년), 『입문 UPnP』(일본 브레인웨어, 2007년) 등을 집필한 바 있다.
역자 : 최강민
임베디드 시스템 컨설팅 및 개발 회사인 디오이즈에서 각종 임베디드 소프트웨어 개발 업무를 담당했으며, 현재는 uITRON 사양의 RTOS 개발 회사인 MiSPO에서 근무 중이며, RTOS 포팅과 미들웨어 개발 업무를 담당 중이다.

품목정보

발행일
2011년 04월 15일
쪽수, 무게, 크기
920쪽 | 1770g | 188*250*40mm
ISBN13
9788960771925

책 속으로

내가 처음으로 이 책의 출간 기획을 들은 것은 2006년 8월이었다. 당초 기획 목표는 2007년 초에 선보일 예정이던 윈도우 비스타 출시에 맞춰 디바이스 드라이버 책을 펴내는 것이었다. 나는 당시 다른 원고를 집필 중이었고 일도 바빴던 탓에 이 기획에 참여할 의사가 없었다. 또한 윈도우 비스타가 NT 커널을 기반으로 한다는 점을 알고 있었기에, 윈도우 98/2000에서야 비로소 구조가 확립된 드라이버 사양인 WDM을 약간 변경한 정도일 거라 예상했다. 그러므로 드라이버 레벨은 종래와 크게 다르지 않으리라고 생각했다.

그러던 중 소프트뱅크 크리에이티브 출판사로부터 '출간 시기를 조정한다'라는 얘기를 듣고 '그럼 한번 써보시겠어요?'라는 제안을 받아들였다. WDM에 관한 책은 이미 몇 권이나 출간됐으므로 독자적으로 어떻게 내용을 작성할지 고민 중일 때, '윈도우 비스타부터는 KMDF라는 새로운 사양과 사용자 모드에서 동작하는 UMDF라는 드라이버 모델도 추가됐다.'라는 이야기를 편집자가 내게 전했다. 조사해 본 결과, 확실히 KMDF와 UMDF라는 새로운 드라이버 모델이 생겨났고 코드도 지금까지와는 전혀 달랐다. 물론, 그럼에도 종래의 WDM이라는 드라이버 사양도 건재했다.

'결국 비스타 버전부터 드라이버를 작성해야 하는 사람은 WDM도 어느 정도 알고 있어야 하고, 새로 추가된 2가지 드라이버 모델도 알아야 하지 않을까? 책을 쓰더라도 참고가 될 만한 해설서가 있었으면……'하고 절실히 느꼈다.

이 책의 특징

'읽고 나면 WDM이나 KMDF/UMDF의 기본 정도는 알 수 있는 책'을 목표로 집필했다. 또한 드라이버나 윈도우 프로그래밍에 정통하지 않아도 C나 C++ 언어에 대한 지식만 있다면 드라이버를 작성할 수 있도록 설명해주는 책을 목표로 잡았다. 실제로 코드를 조금씩 작성하며 실습헤볼 수 있도록 엮었다. 나는 복잡한 프로그램일수록 코드를 실제로 동작시키며 이해하는 것이 가장 빠른 길이라고 확신하기에, 독자가 가능한 한 순서대로 실습할 수 있도록 책을 구성했다. 이 책의 설명만으로 이해하기 어렵더라도 디버그 메시지를 추가하거나 반복해 동작시키다 보면 좀 더 이해하기 쉬울 것이라 생각한다.

이 책에서는 제어 대상으로 USB를 선택했다. USB를 선택한 이유는 USB가 KMDF와 UMDF 모두 지원하며, 쉽게 구할 수 있고, PC용 주변기기 규격으로서는 가장 많이 보급돼 있기 때문이다. 또한 다른 종류의 드라이버에 비해 실습하기 쉬우며, 배우기도 쉽기 때문이다. 이 책에서는 USB 디바이스 드라이버를 작성할 것이지만 다른 종류의 드라이버를 작성할 때도 KMDF나 UMDF의 기본구조를 이해하는 데 참고가 되리라 생각한다.---저자 서문 중에서

USB는 없어서는 안 될 표준 버스 규격이 됐다고 해도 과언이 아닐 것이다. 주변기기를 위한 다양한 버스 규격이 있음에도 불구하고 이처럼 널리 보급된 이유에는 여러 가지가 있다. USB가 성공한 배경에는 버스 자체의 간결성과 기존 다른 버스 규격들을 포용하는 범용성을 고려한 구조에 있지 않았을까 감히 생각해본다.

USB는 얼마 전 USB 3.0 명세서가 발표되면서 고속성과 신뢰성을 무기로 지금도 계속 진화 중이며, 앞으로도 더욱 다양한 분야에서 활용할 수 있는 범용 버스로서의 역할을 톡톡히 하게 될 것이다.

여기 또 하나의 윈도우 디바이스 드라이버 서적이 나왔다.

이미 시중에는 윈도우 디바이스 드라이버에 관련된 훌륭한 서적들이 많이 있다. 그러나 USB에 할애하는 지면이 극히 적거나 이론적인 내용만 소개함으로써 부족함을 느꼈을지 모른다. 사실 USB는 범용성을 위해 설계된 만큼 버스 규격이 복잡하고 방대하다. 특정 클래스까지 모두 완벽하게 소화하려면 그 내용만으로도 수백 페이지에 이를 것이다. 이런 이유로 인해 USB 버스에 치중해 내용을 전개해 나가는 데 한계가 있었을 것이다.

이 책은 USB용 윈도우 디바이스 드라이버의 개발 방법을 주로 다룬다. 우선 USB에 전체를 할애했다는 점에서 매우 반갑다. USB에 관한 기초 지식뿐만 아니라 USB용 저장 장치 드라이버 개발에 필요한 대용량 저장 장치 클래스를 설명한다. 물론 윈도우 환경에서 동작하는 디바이스 드라이버인 만큼 WDM은 물론 그 후속 모델인 KMDF, UMDF도 다룬다. 특히 동일한 드라이버를 각 드라이버 모델로 재구성해 설명함으로써 각 드라이버 모델 간의 개발 방법에 대한 차이를 더 잘 이해할 수 있게 했다. 또한 이론과 실습을 적절히 겸비해 지루하지 않게 구성됐다. 단계별로 드라이버 작성에 필요한 지식을 설명하고 검증을 통해 그 지식을 확인하는 형태로 구성돼 있으므로 그리 어렵지 않게 접근할 수 있을 것이다. 특히 특정 타겟을 위한 전용 USB 디바이스 드라이버를 작성해야 하는 임베디드 개발자나 윈도우 드라이버 개발에 입문하는 윈도우 시스템 개발자에게 모두 도움이 될 것이다.

이 책의 원제는 『윈도우 비스타 디바이스 드라이버 프로그래밍』으로 윈도우 비스타 환경을 염두에 두고 있지만 윈도우 비스타에만 국한된 내용은 아니다. 윈도우 디바이스 드라이버 모델들을 총칭하는 WDF(Windows Driver Framework)를 다루므로 윈도우 7에도 그대로 적용할 수 있다. 한글판에서는 시대의 흐름에 맞춰 윈도우 7에서 동작을 확인하고 그 실행 결과를 담았다.

---옮긴이의 말 중에서

리뷰/한줄평2

리뷰

6.0 리뷰 총점

한줄평

6.0 한줄평 총점

클린봇이 부적절한 글을 감지 중입니다.

설정