책 이미지

책 정보
· 분류 : 국내도서 > 컴퓨터/모바일 > 프로그래밍 개발/방법론 > 윈도우 프로그래밍
· ISBN : 9788956741475
· 쪽수 : 960쪽
· 출판일 : 2004-01-05
책 소개
목차
Chapter 1 드라이버 프로젝트 시작하기
디바이스 드라이버에 대한 간략한 역사
운영체제 개관
Windows XP 개관
Windows 98/Windows Me 개관
어떤 종류의 드라이버가 필요한가?
WDM 드라이버
그 외 드라이버 타입
관리 문제 대한 개관과 체크리스트
Chapter 2 WDM 드라이버의 기본 구조
드라이버의 작동 방식
어플리케이션의 작동 방식
디바이스 드라이버
시스템의 드라이버 로딩 방식
디바이스와 드라이버의 계층화(Layering)
플러그 앤 플레이 디바이스
Legacy 디바이스
재귀적 열거(Recursive Enumeration)
드라이버 로딩 순서
IRP 라우팅
두 개의 기본 데이터 구조
Driver Object
Device Object
DriverEntry 루틴
DriverEntry 개요
DriverUnload
AddDevice 루틴
Device Object 생성
디바이스 이름 짓기(naming)
기타 전역적인 디바이스 초기화
모두 합쳐 넣기
Windows 98/Me 호환성 노트
DriverEntry 호출에서 다른 점
DriverUnload
\GLOBAL?? 디렉터리
구현되지 않은 디바이스 타입들
Chapter 3 프로그래밍 기본 테크닉
커널 모드 프로그래밍 환경
표준 런타임 라이브러리 함수 사용하기
매크로 함수에 대한 주의
에러 핸들링
상태 코드(State Codes)
구조화된 예외 처리(Structured Exception Handling)
버그 체크
메모리 관리
유저 모드와 커널 모드 주소 공간
힙(Heap) 할당자
링크드 리스트(Linked List)
Lookaside List
문자열 처리
기타 프로그래밍 테크닉
레지스트리 액세스하기
파일 액세스하기
부동소수점 연산
디버깅 쉽게 하기
Windows 98/Me 호환성 노트
파일 I/O
부동 소수점
Chapter 4 동기화(Synchronization)
전형적인 동기화 문제
IRQL(Interrupt Request Level)
IRQL의 작동 방식
쓰레드 우선순위와 비교해 본 IRQL
IRQL과 페이징
IRQL을 간접적(implicitly)으로 제어하기
IRQL을 명시적(explicitly)으로 제어하기
스핀락(Spin Lock)
스핀락에 대한 몇 가지 사실
스핀락 사용하기
Queued 스핀락
커널 Dispatcher 객체
쓰레드 블록 가능 시점과 방법
단일 dispatcher 객체에 대한 대기(waiting)
다중 dispatcher 객체에서의 대기
커널 이벤트
커널 세마포어(Semaphore)
커널 뮤텍스(mutex)
커널 타이머
동기화를 위해 쓰레드 사용하기
쓰레드 경고(Alert)와 APC
그 외 커널 모드 동기화 Primitive들
Fast Mutex 객체
Interlocked 연산
Interlocked List 액세스
Windows 98/Me 호환성 노트
Chapter 5 I/O 요청 패킷(I/O Request Packet)
데이터 구조
IRP의 구조
I/O 스택
IRP 처리의 "표준 모델"
IRP 생성하기
디스패치 루틴으로의 포워딩
디스패치 루틴의 임무
StartIo 루틴
ISR(Interrupt Service Routine)
DPC(Deferred Procedure Call) 루틴
완료 루틴(Completion Routines)
I/O 요청 큐에 넣기
DEVQUEUE 객체 사용하기
Cancel-safe Queue(취소에도 안전한 큐) 사용하기
I/O 요청 취소하기
멀티태스킹이 아니라면...
동기적 취소
IRP 취소에 관한 세부적 사항
DEVQUEUE에서 취소 처리하는 방법
우리가 생성한 IRP 취소하기
IRP_MJ_CLEANUP 처리하기
DEVQUEUE로 cleanup하기
Cancel-Safe Queue로 cleanup하기
요약 여덟가지 IRP 처리 시나리오
시나리오 1 완료 루틴을 가지고 하위로 전달하기
시나리오 2 완료 루틴 없이 하위로 전달하기
시나리오 3 디스패치 루틴에서 완료하기
시나리오 4 이후 처리를 위해 큐에 저장하기
시나리오 5 우리가 생성한 비동기적 IRP
시나리오 6 우리가 생성한 동기적 IRP
시나리오 7 동기적으로 하위에 전달하기
시나리오 8 비동기적 IRP를 동기적으로 처리하기
Chapter 6 Function Driver에 대한 플러그 앤 플레이
IRP_MJ_PNP 디스패치 함수
디바이스의 시작과 정지
IRP_MN_START_DEVICE
IRP_MN_STOP_DEVICE
IRP_MN_REMOVE_DEVICE
IRP_MN_SURPRISE_REMOVAL
PnP 상태 전환 관리하기
디바이스 시작하기
디바이스를 정지시킬 수 있는가?
디바이스가 정지되는 동안
디바이스를 제거할 수 있는가?
동기적으로 제거하기
어쨋든 왜 이렇게 @#$&*한 remove lock이 필요한 걸까?
DEVQUEUE가 PnP를 처리하는 방법
그 외 설정 기능
리소스 필터링 요청
디바이스 사용 통지(Usage Notification)
PnP 통지(Notification)
Windows 98/Me 호환성 노트
급작스런 제거(Surprise Removal)
PnP 통지
Remove Lock
Chapter 7 데이터 읽기와 쓰기
디바이스 설정하기
데이터 버퍼 주소 지정(Addressing)
버퍼링 방식 지정하기
Direct 방식
포트와 레지스터
포트 리소스
메모리 리소스
인터럽트 서비스하기
인터럽트의 설정
인터럽트 처리하기
DPC(Deferred Procedure Call)
간단한 인터럽트 발생 드라이버
DMA(Direct Memory Access)
전송 전략
DMA 전송의 수행
공용 버퍼(common buffer) 사용하기
간단한 버스 마스터링 디바이스
Windows 98/Me 호환성 노트
Chapter 8 전원 관리
WDM 전원 모델
WDM 드라이버의 역할
디바이스 전원 상태와 시스템 전원 상태
전원 상태의 전환
IRP_MJ_POWER 요청 처리하기
전원 전환(transition) 관리하기
기반 요구 사항
초기 우선순위
전원을 증가시키는 System Power IRP
전원을 감소시키는 System power IRP
디바이스 전원 IRP
전원 관리에 관한 기타 세부사항
AddDevice에서 설정하는 플래그
디바이스 wake-up 기능
유휴(Idle) 상태 일 때 전원 끄기
상태 변화를 최적화하기 위해 시퀀스 넘버 사용하기
Windows 98/Me 호환성 노트
DO_POWER_PAGABLE의 중요성
전원 IRP 완료하기
Device Power IRP 요청하기
PoCallDriver
다른 차이점들
Chapter 9 I/O 컨트롤 오퍼레이션
DeviceIoControl API
DeviceIoControl에 대한 동기적/비동기적 호출
I/O Control Code 정의
IRP_MJ_DEVICE_CONTROL 처리하기
METHOD_BUFFERED
DIRECT 버퍼링 방식
METHOD_NEITHER
안전하고 보안성을 가진 IOCTL 인터페이스 설계하기
내부 I/O 컨트롤 오퍼레이션
어플리케이션에게 이벤트 통지하기
통지를 위해 이벤트 공유방식 사용하기
통지를 위해 Pending IOCTL 방식 사용하기
Windows 98/Me 호환성 노트
Chapter 10 WMI(Windows Management Instrumentation)
WMI의 개념
샘플 스키마
WMI 클래스를 C 구조체로 매핑하기
WDM 드라이버와 WMI
IRP를 WMILIB에게 위임하기
고급 기능
Windows 98/Me 호환성 노트
Chapter 11 컨트롤러와 다기능(multifunction) 디바이스
전체 아키텍처
자식 device object
PnP 요청 처리하기
PnP Manager에게 자식들을 알리기
PnP 요청에 대한 PDO의 처리
디바이스 제거
IRP_MN_QUERY_ID 처리
IRP_MN_QUERY_DEVICE_RELATIONS 처리
IRP_MN_QUERY_INTERFACE 처리
전원 요청 처리
자식 디바이스의 리소스 처리
Chapter 12 USB(Universal Serial Bus)
프로그래밍 아키텍처
디바이스 계층
디바이스 안에는 무엇이 있나?
흐름 정보
Descriptor
bus driver와 같이 동작하기
요청 생성하기
설정(Configuration)
Bulk 전송 파이프 처리
인터럽트 파이프 처리
컨트롤 요청
isochronous 파이프 처리
USB 디바이스에 대한 Idle 전원 관리
Chapter 13 HID(Human Interface Devices)
HID 디바이스 드라이버
Report와 Report Descriptor
샘플 키보드 Descriptor
HIDFAKE Descriptor
HIDCLASS Minidrivers
DriverEntry
드라이버 콜백 루틴
Internal IOCTL 인터페이스
Windows 98/Me 호환성 노트
IRP_MN_QUERY_ID 처리하기
조이스틱
Chapter 14 기타 주제
에러 로깅
에러 로그 패킷 생성
메시지 파일 생성하기
시스템 쓰레드
시스템 쓰레드의 생성과 종료
디바이스 폴링에 대한 시스템 쓰레드
Work Items
와치독 타이머(Watchdog Timer)
Windows 98/Me 호환성 노트
에러 로깅
시스템 쓰레드 끝나기를 기다리기
Work Items
Chapter 15 디바이스 드라이버 배포하기
레지스트리의 역할
Hardware (Instance) Key
Class Key
Driver Key
Service (Software) Key
프로그램에서 레지스트리에 액세스하기
Device Object의 속성
INF 파일
Install 섹션
레지스트리에 추가 섹션 저장하기
보안 설정
문자열과 지역화(Localization)
디바이스 식별자
드라이버 순위 매기기(ranking)
INF 파일을 위한 도구
디바이스 클래스 정의하기
속성 페이지 제공자(Property-page provider)
커스터마이징 셋업
인스톨러와 Co-installer
드라이버 파일 프리인스톨(preinstall)하기
부가가치(value-added) 소프트웨어
프로그램적으로 드라이버 설치하기
RunOnce 키
프로그램 시작시키기
WHQL(Windows Hardware Quality Lab)
하드웨어 호환성 테스트(Hardware Compatibility Test) 수행하기
드라이버 패키지의 제출
Windows 98/Me 호환성 노트
속성 페이지 제공자
Installer와 Co-installer
프리인스톨(preinstalled) 된 드라이버 패키지
전자 서명
프로그램적으로 드라이버 설치하기
CONFIGMG API
INF 비호환성
레지스트리 사용
디바이스 속성 알아오기
Chapter 16 Filter Driver
filter driver의 역할
upper Filter Driver
lower filter driver
filter driver의 구조
DriverEntry 루틴
AddDevice 루틴
DispatchAny 함수
DispatchPower 루틴
DispatchPnp 루틴
filter driver 설치하기
class filter 설치하기
function driver와 함께 device filter를 설치하기
이미 존재하는 디바이스에 대해 device filter를 설치하기
케이스 스터디
트래픽 모니터링을 위한 lower filter
명명된(named) 필터
Bus Filters
키보드와 마우스 filter driver
다른 HID 디바이스를 필터링하기
Windows 98/Me 호환성 노트
VxD 드라이버에 대한 WDM filter
INF 파일
Class Filter Driver
Appendix A 크로스 플랫폼 비호환성의 처리
운영체제 버전 알아내기
런타임시 동적 링크
플랫폼 호환성 검사
커널 모들 루틴을 위한 Win98/Me 스텁(Stub) 정의하기
버전 호환성
스텁 함수
WDMSTUB 사용하기
WDMSTUB과 WDMCHECK간의 상호 작용
라이센스 관련 사항
Appendix B WDMWIZ.AWX 사용법
기본적인 드라이버 정보
DeviceIoControl 코드
I/O 리소스
USB 엔드포인트
WMI 지원
INF 파일에 대한 매개변수
그 다음은?