책 이미지

책 정보
· 분류 : 국내도서 > 대학교재/전문서적 > 공학계열 > 컴퓨터공학 > 컴퓨터 구조
· ISBN : 6000106241
· 쪽수 : 576쪽
· 출판일 : 2004-02-27
책 소개
목차
용어 대역표
머리말
서문
Chapter 1 Windows 2000 드라이버 개요
종합적인 시스템 아키텍쳐
Windows 2000의 설계 목표
Windows 2000 하드웨어 특권 레벨
호환성
확장성
성능
실행부 구성 요소
커널 모드 I/O 구성 요소
I/O 서브시스템의 설계 목표
Windows 2000 드라이버의 종류
특별한 드라이버 아키텍쳐
비디오 드라이버
프린터 드라이버
멀티미디어 드라이버
네트워크 드라이버
요약
Chapter 2 하드웨어 환경
하드웨어의 기본
디바이스 레지스터
디바이스 레지스터에 접근하기
디바이스 인터럽트
데이터 전송 메커니즘
DMA 메커니즘
디바이스 전용 메모리
자동 조정과 자동 설정
버스와 Windows 2000
ISA : 산업 표준 구조
EISA : 확장된 산업 표준 구조
PCI(Peripheral Component Interconnect)
USB : 범용 시리얼 버스
IEEE 1394 : FirewireTM 버스
PC 카드(PCMCIA) 버스
하드웨어를 다루기 위한 힌트
하드웨어에 대해 배우기
하드웨어의 기능 이용하기
하드웨어 테스트
요약
Chapter 3 커널 모드의 I/O 처리 과정
커널 모드의 코드가 어떻게 수행되는가?
트랩 혹은 예외 컨텍스트
인터럽트 컨텍스트
커널 모드 쓰레드 컨텍스트
Windows 2000의 인터럽트 우선권
CPU 우선권 레벨
인터럽트 처리 과정
소프트웨어 인터럽트
지연된 프로시저 호출(DPC)
DPC의 동작
DPC의 특성
사용자 버퍼로의 접근
버퍼 접근 메커니즘
커널 모드 드라이버의 구조
드라이버의 초기화와 정리 루틴
I/O 시스템 서비스 디스패치 루틴
데이터 전송 루틴
자원 동기화 콜백
여타 드라이버의 루틴들
I/O 처리 과정
I/O 관리자에 의한 전처리 단계
디바이스 드라이버에 의한 전처리 단계
디바이스 시작(Start) 서비스와 인터럽트 서비스
드라이버에 의한 후처리 단계
I/O 관리자에 의한 후처리 단계
요약
Chapter 4 드라이버와 커널 모드 객체
데이터 객체와 Windows 2000
Windows 2000과 객체지향 프로그래밍
Windows 2000 객체와 Win32 객체
I/O 요청 패킷(IRP)
IRP의 레이아웃
IRP의 처리
드라이버 객체
드라이버 객체의 레이아웃
디바이스 객체와 디바이스 익스텐션
디바이스 객체의 레이아웃
디바이스 객체 처리하기
디바이스 익스텐션
컨트롤러 객체와 컨트롤러 익스텐션
컨트롤러 객체의 레이아웃
컨트롤러 객체 처리하기
컨트롤러 익스텐션
어댑터 객체
어댑터 객체의 레이아웃
어댑터 객체 다루기
인터럽트 객체
인터럽트 객체의 레이아웃
인터럽트 객체 처리하기
요약
Chapter 5 디바이스 드라이버 개발의 일반적인 사항
드라이버 설계 정책
표면적인 설계 방법
점진적인 개발 방법론
예제 드라이버의 테스트와 사용
코딩의 규칙과 기법
일반적인 권장사항
명명법
헤더 파일
리턴 상태 값
Windows 2000 드라이버에서 지원하는 함수
초기화 루틴의 폐기
드라이버의 페이징 제어
드라이버의 메모리 할당
드라이버에 사용되는 메모리
커널 스택에서 작업하기
풀 영역에서 작업하기
시스템에서 지원하는 하위 메모리 할당
유니코드 스트링
유니코드 스트링 데이터 타입
유니코드로 작업하기
인터럽트 동기화
문제점
인터럽트 블럭킹
인터럽트 블럭킹 규칙
DPC를 사용한 동기화
다중 CPU간의 동기화
스핀락의 구동 방식
스핀락의 사용
스핀락을 사용하는 규칙
연결 리스트
단일 연결 리스트
이중 연결 리스트
리스트로부터 블럭 제거
요약
Chapter 6 드라이버의 초기화와 정리 루틴
DriverEntry 루틴의 작성
실행 컨텍스트
DriverEntry 루틴에서의 동작
DriverEntry 지정
디바이스 객체의 생성
버퍼링 전략의 선택
디바이스 이름
예제 코드 : 드라이버 초기화
DriverEntry
CreateDevice
Reinitialize 루틴의 작성
실행 컨텍스트
Reinitialize 루틴에서 수행하는 작업
Unload 루틴의 작성
실행 컨텍스트
Unload 루틴에서 수행하는 작업
예제 코드 : 드라이버 언로드
Shutdown 루틴의 작성
실행 컨텍스트
Shutdown 루틴에서 수행하는 작업
셧다운 통보 활성화시키기
드라이버 테스트
테스트 과정
Visual C++ 디바이스 드라이버 애플리케이션 마법사
Windows 2000 DDK
드라이버 빌드의 결과물
커널 모드 드라이버 수동으로 설치하기
드라이버 로드하기
Windows 2000 컴퓨터 관리 콘솔
WINOBJ 유틸리티
요약
Chapter 7 드라이버 디스패치 루틴
드라이버 디스패치 루틴
I/O 요청 디스패칭 메커니즘
특정 함수 코드의 활성화
어떤 함수 코드를 지원할 지 결정하기
드라이버의 디스패치 루틴 작성
실행 컨텍스트
디스패치 루틴에서 수행하는 동작
디스패치 루틴에서 빠져나오기
읽기, 쓰기 요청의 처리 과정
사용자 버퍼로의 접근
예제 코드 : 루프백 디바이스
디스패치 인터페이스의 확장
개별적인 IOCTL 값에 대한 정의
IOCTL 인자 전달 방법
IOCTL 헤더 파일 작성하기
IOCTL 요청의 처리
IOCTL 버퍼 관리
드라이버 디스패치 루틴의 테스트
테스트 과정
예제 테스트 프로그램
요약
Chapter 8 인터럽트 I/O
Programmed I/O의 동작 방식
Programmed I/O가 동작하는 동안 어떤 일이 발생하는가?
드라이버 루틴의 동기화
드라이버 초기화와 정리 작업
Start I/O의 시작점을 초기화하기
DpcForIsr 루틴 초기화
인터럽트 소스에 연결하기
인터럽트 소스로부터 해제
Start I/O 루틴의 작성
실행 컨텍스트
Start I/O 루틴에서 하는 작업
인터럽트 서비스 루틴(ISR)의 작성
실행 컨텍스트
인터럽트 서비스 루틴에서 하는 작업
DpcForIsr 루틴 작성
실행 컨텍스트
DpcForIsr 루틴에서 처리하는 작업
우선순위 증가
하드웨어 예 : 병렬 포트
병렬 포트의 동작 방식
디바이스 레지스터
인터럽트의 발생
병렬 포트를 위한 루프백 커넥터
예제 코드 : 병렬 포트 루프백 드라이버
드라이버의 목적
Driver.H
Driver.cpp
병렬 포트 루프백 드라이버의 테스트
테스트 절차
요약
Chapter 9 하드웨어의 초기화
플러그 앤 플레이 아키텍처 : 주요 역사
플러그 앤 플레이의 목표
플러그 앤 플레이의 구성 요소
레거시 드라이버에서 레지스트리의 역할
플러그 앤 플레이에서 디바이스의 감지
플러그 앤 플레이에서 계층 드라이버의 역할
새로운 WDM IRP의 디스패치 함수
필수적인 플러그 앤 플레이 IRP
PDO의 플러그 앤 플레이 IRP
플러그 앤 플레이 요청을 하부로 전달하기
I/O 완료 루틴
버스 드라이버의 플러그 앤 플레이 요청
디바이스 열거
하드웨어 자원 기술자
드라이버 내에서의 하드웨어 자원 사용
디바이스 인터페이스
인터페이스 정의
인터페이스 생성
인터페이스 참조 카운팅
인터페이스의 등록과 활성화
예제 코드 : 간단한 플러그 앤 플레이 드라이버
요약
Chapter 10 전원 관리
핫 플러그 디바이스
버스에 대한 고려사항
디바이스에 대한 고려 사항
OnNow Initiative
전원 상태
전원 정책
전원 상태 메트릭스
전원 상태 변경
깨우기 요청
깨움 요청 IRP 취소하기
전원 관리 이슈
휴지기(Idle) 관리
전원 관리에 대한 사용자 인터페이스
요약
Chapter 11 타이머
디바이스의 타임아웃 처리
I/O 타이머 루틴의 동작 방식
디바이스의 타임아웃 조건 처리
예제 코드 : 디바이스의 타임아웃 잡기
디바이스 익스텐션의 추가사항
AddDevice 루틴의 추가사항
Create 디스패치 루틴의 변경된 사항
StartIO 루틴의 변화
ISR의 변경 사항
I/O 타이머 콜백 루틴
인터럽트가 제공되지 않는 디바이스의 관리
폴링 디바이스와 작업하기
CustomTimerDpc 루틴의 동작 방식
CustomTimerDpc 루틴을 설정하는 방법
타이머 해제시간 설정하기
CustomTimerDpc 루틴의 다른 용도
예제 코드 : 타이머 기반의 드라이버
디바이스 익스텐션의 추가 사항
AddDevice의 수정사항
TransmitBytes 함수의 변경사항
PollingTimerDpc 루틴
요약
Chapter 12 DMA 드라이버
Windows 2000 상에서 DMA가 동작하는 방법
어댑터 객체를 사용하여 DMA 하드웨어의 변종 숨기기
Scatter/Gather 문제
메모리 디스크립터 리스트
캐쉬의 일관성 유지
패킷 기반과 공통 버퍼 DMA
Windows 2000 DMA 설계 상의 제약
어댑터 객체를 이용하여 작업하기
올바른 어댑터 객체 찾기
어댑터 객체를 얻어오고 해제하기
DMA 하드웨어 설정
어댑터 객체 캐쉬 플러쉬하기
패킷 기반의 슬레이브 DMA 드라이버 작성
패킷 기반의 슬래이브 DMA가 동작하는 방법
DMA 전송 나누기
예제 코드 : 패킷 기반의 슬레이브 DMA 드라이버
DRIVER.H
GetDmaInfo 루틴
Start I/O 변경
AdapterControl 루틴
DpcForIsr 루틴
패킷 기반의 버스 마스터 DMA 드라이버 작성
버스 마스터 하드웨어 설정
Satter/Gather 지원 하드웨어
MapTransfer를 사용하여 Scatter/Gather 리스트 만들기
공통 버퍼 슬레이브 DMA 드라이버 작성
공통 버퍼 할당하기
처리량 관리를 위해 공통 버퍼 슬레이브 DMA 사용하기
공통 버퍼 버스 마스터 DMA 드라이버 작성
공통 버퍼 버스 마스터 DMA가 작동하는 방식
요약
Chapter 13 Windows 관리 기구
WMI
WMI 아키텍처
WMI를 지원하는 WDM 드라이버의 작성
MOF의 문법
MOF 클래스 정의의 예
MOF 소스 컴파일
WMI IRP 요청 처리하기
클래스와 인스턴스
WMILIB
DpWmiQueryReginfo
DpWmiQueryDataBlock
DpWmiSetDataBlock
DpWmiSetDataItem
DpWmiExecuteMethod
DpWmiFunctionControl
WMI 요약
전통적인 방법의 드라이버 이벤트 로깅
이벤트 로깅의 동작 방식
메시지로 작업하기
메시지 정의 파일 작성
간단한 예제
메시지 정의 파일 컴파일하기
드라이버에 메시지 리소스를 추가
드라이버를 이벤트 소스(Event Source)로 등록
로그 엔트리 생성
에러 로그 패킷 할당
로깅 에러
요약
Chapter 14 시스템 쓰레드
시스템 쓰레드의 정의와 사용
쓰레드를 사용해야 할 경우
시스템 쓰레드의 생성과 소멸
쓰레드 우선순위 관리하기
시스템 작업자 쓰레드
쓰레드 동기화
시간 동기화
일반적인 동기화
디스패쳐 객체 사용하기
이벤트 객체
드라이버간의 이벤트 공유
뮤텍스 객체
세마포어 객체
타이머 객체
쓰레드 객체
뮤텍스의 변형
동기화 교착
예제 코드 : 쓰레드 기반의 드라이버
어떻게 드라이버가 작동하는가?
DEVICE_EXTENSION 구조체
AddDevice 함수
DispatchReadWrite 함수
Thread.cpp
Transfer.C
요약
Chapter 15 계층 드라이버
인터미디엇 드라이버의 개관
정의된 인터미디엇 드라이버
계층적 구조를 언제 사용하는가?
계층 드라이버의 작성
계층 드라이버가 동작하는 방식
계층 드라이버의 초기화와 정리 루틴
예제 코드 : 다른 드라이버와 연결하기
계층 드라이버를 위한 다른 초기화 부분
계층 드라이버에서 I/O 요청 처리
예제 코드 : 하위 레벨의 드라이버를 호출하기
I/O 완료 루틴의 작성
I/O 완료 콜백을 요청하기
실행 컨텍스트
I/O 완료 루틴의 수행 동작
예제 코드 : I/O 완료 루틴
IRP의 추가 할당
IRP의 I/O 스택 재방문(Revisited)
IRP의 스택 크기 조정하기
IoBuildSynchronousFsdRequest로 IRP 생성
IoBuildAsynchronousFsdRequest로 IRP 생성
IoBuildDeviceIoControlRequest로 IRP 생성
다른 방법으로 IRP 할당하기
하위 드라이버를 위한 버퍼 설정
드라이버에서 할당된 IRP를 기억하기
필터 드라이버의 작성
필터 드라이버의 동작 방식
필터 드라이버에서의 초기화와 정리 루틴
필터 드라이버 부착의 투명함
예제 코드 : 필터 드라이버
DEVICE_EXTENSION 구조체
DriverEntry 함수
AddDevice 함수
OverriddenDispatchWrite 함수
OverriddenDispatchDeviceIoControl 함수
DispatchPassThru 함수
I/O 완료 루틴
커플 드라이버의 작성
커플 드라이버의 동작 방식
커플 드라이버에서의 초기화와 정리
요약
Chapter 16 드라이버의 설치
드라이버의 설치
INF 파일을 이용한 자동 설치
INF 파일의 구조
버전 섹션
제작자 섹션
모델 섹션
DDInstall 섹션
CopyFiles 섹션
AddReg 섹션
SourceDisksNames 섹션
SourceDisksFiles 섹션
DestinationDirs 섹션
DDInstall.Services 섹션
ServiceInstall 섹션
INF 예제
INF 문법 검증
드라이버 INF 파일의 사용
수동 설치
자동 설치
하드웨어의 추가/제거
클래스 이름과 디바이스 ID
설치의 주문 제작
드라이버 로딩 순서의 제어
드라이버 스택의 순서
드라이버의 디지털 서명
왜 Microsoft사가 드라이버를 검증하는가?
디지털 서명
요약
Chapter 17 테스트와 드라이버 디버깅
드라이버의 테스트를 위한 가이드라인
드라이버의 테스트를 위한 일반적인 접근 방법
Microsoft 하드웨어 호환 테스트
드라이버가 구동에 실패하는 이유
드라이버 에러의 종류
드라이버의 에러를 다시 만들어내기
방어적인 코딩 기법
드라이버의 버그를 기록해 두기
크래쉬 스크린 읽기
시스템 크래쉬가 발생했을 때 무엇이 일어나는가?
죽음의 블루 스크린(BSOD)
WinDbg 개관
소스 코드 디버깅
몇 가지 디버그 명령어
크래쉬 덤프 분석
크래쉬 덤프 분석의 목적
분석의 시작
스택 추적
간접적인 방법
상호 디버깅
디버그 세션의 시작과 종료
브레이크포인트 설정
고급 브레이크포인트 설정
중간 출력
WinDbg 확장 작성하기
WinDbg 동작 방식
초기화와 함수 버전 체크
확장 명령 작성하기
WinDbg 보조 함수
확장 DLL 빌드와 사용
예제 코드 : WinDbg 확장
DBG.C
잡다한 디버깅 기법
디버깅 코드를 없애자
부정확한 가정을 잡기
Bugcheck 콜백의 사용
메모리 누수 잡기
카운터, 비트, 버퍼
요약
Appendix A 드라이버 디버깅 환경
하드웨어와 소프트웨어의 필요조건
호스트 시스템
타겟 시스템
호스트와 타겟 연결하기
디버그 심볼 파일
운영체제의 심볼
드라이버 심볼
타겟 시스템에 덤핑 가능하게 하기
키 조작을 통해 메모리 덤프 얻어내기
타겟 시스템의 디버그 클라이언트를 활성화시키기
BOOT.INI 수정하기
Appendix B 버그체크 코드
Appendix C 드라이버 만들기
Build 유틸리티
Build가 하는 일
BUILD를 갖고 드라이버를 생성하는 방법
SOURCES 파일 작성하기
BUILD에 의해서 생성되는 로그 파일
반복적인 BUILD 작업
Visual Studio를 이용하여 드라이버 만들기
DDAppWiz 도구
프로세서 환경 심볼의 수정
컴파일러 옵션 수정
컴파일러의 디렉토리
링크의 수정
MFC 설정 옵션
참고 문헌
부록 CD-ROM에 대해
찾아보기