목차
01 파일 시스템 드라이버에 대해서
   Section 01 Windows 시스템의 구조 ... 22
      참고 : 시스템 보호 문제 ... 23
      참고 : 드라이버의 분류 기준 ... 24
      참고 : WDM 드라이버 ... 27
   Section 02 파일 시스템 드라이버 ... 28
      1. 파일 시스템 드라이버의 특징 ... 28
        참고 : 파일 시스템과 파일 시스템 드라이버 ... 28
        참고 : 볼륨에 할당된 상징적인 이름 찾기 ... 31
      2. 파일 시스템 드라이버의 기능 ... 32
      3. 파일 시스템 드라이버의 종류 ... 32
      4. Windows 2000 파일 시스템의 종류 ... 37
        참고 : Windows 2000에서 지원하는 파일 시스템 ... 40
   Section 03 필터 드라이버 ... 42
      1. 필터 드라이버란 무엇인가? ... 42
        참고 : 데이터 보호 ... 42
        참고 : 모니터링 툴 제공 사이트 ... 44
      2. 어떻게 IRP를 가로채는가? ... 44
        참고 : 필터 드라이버라는 용어의 사용에 관해 ... 45
        참고 : 파일 시스템 필터 드라이버가 중요한 이유 ... 47
02 드라이버 동기화 메커니즘
   Section 01 스핀 록 ... 50
      1. 데드록 ... 52
      2. 데드록을 피하는 방법 ... 53
        참고 : 데드록을 확인하는 방법 ... 53
      3. 스핀 록의 사용 규칙 ... 54
        참고 : 페이징이 가능한 데이터와 페이징이 불가능한 데이터 ... 55
      4. 스핀 록의 종류 ... 56
   Section 02 디스패처 오브젝트 ... 63
      1. 이벤트 오브젝트 ... 65
      2. 뮤텍스 오브젝트 ... 70
      3. 세마포어 오브젝트 ... 74
      4. 타이머 오브젝트 ... 76
   Section 03 리소스 오브젝트 ... 78
      참고 : APC ... 83
   Section 04 그 밖의 커널 모드 동기화 오브젝트 ... 84
      1. Fast Mutex 오브젝트 ... 84
      2. 인터록 연산 ... 87
      3. 결론 ... 88
03 프로세스와 스레드의 컨텍스트
   Section 01 컨텍스트란 무엇인가? ... 92
   Section 02 코드가 실행되는 컨텍스트 ... 96
   Section 03 스레드와 프로세스 컨텍스트의 중요성 ... 99
   Section 04 오브젝트와 핸들 ... 106
04 I/O 관리자
   Section 01 I/O 시스템 ... 112
      1. 설계 목표 ... 112
      2. I/O 시스템의 구성 요소 ... 113
      3. I/O 서브 시스템 ... 114
   Section 02 I/O 관리자 ... 116
      1. I/O 관리자가 제공하는 기능 ... 116
      2. I/O 관리자의 설계 개념 ... 117
        참고 : Diskmon ... 122
      3. 파일 시스템 드라이버와 I/O 관리자의 통신 ... 123
   Section 03 주요 데이터 구조체 ... 126
      1. 드라이버 오브젝트 구조체 ... 126
        참고 : 파일 시스템 필터 드라이버에서 DriverUnload 함수 호출 ... 129
      2. 디바이스 오브젝트 구조체 ... 130
        참고 : AttachedDevice 필드 내용 확인하기 ... 134
      3. IRP ... 136
        참고 : Lookaside 리스트와 Zone 영역에 대해서 ... 140
        참고 : I/O를 요청한 스레드의 모드를 알기 위한 방법 ... 143
      4. VPB 구조체 ... 152
      5. I/O Status Block 구조체 ... 155
      6. 파일 오브젝트 구조체 ... 156
   Section 04 오브젝트의 선택과 사용 ... 161
      참고 : 유용한 디버깅 명령어 DT ... 163
05 데이터 버퍼에 대해서
   Section 01 I/O 데이터 버퍼의 종류 ... 166
      1. Direct I/O 방식 ... 166
        참고 : 데이터 버퍼 방식 설정에 대해서 ... 167
        참고 : Next 필드 ... 169
      2. Buffered I/O 방식 ... 171
      3. Neither I/O 방식 ... 175
      4. 데이터 버퍼 방식의 선택 ... 176
   Section 02 Device I/O 컨트롤 코드 ... 178
      1. 사용자 IOCTL 정의 ... 178
      2. CTL_CODE 매크로의 사용 ... 183
        참고 : IOCTL 디코더 툴 ... 185
06 IRP의 처리 과정
   Section 01 IRP에 대해서 ... 188
   Section 02 IRP 처리 방식 ... 192
   Section 03 동기적/비동기적 I/O 처리 ... 196
      1. 동기적 I/O 처리 방식 ... 197
      2. 비동기적 I/O 처리 방식 ... 199
   Section 04 IRP의 할당과 생성 ... 202
      1. IRP의 할당 ... 202
      2. IRP의 생성 ... 204
      3. IRP의 완료 루틴 ... 208
      4. IRP의 재사용 ... 209
      5. IRP를 생성하기 위한 함수 ... 210
      5. DPC에 기반을 둔 I/O 요청 ... 210
      7. MDL에 기반을 둔 I/O 요청 ... 211
      8. 데이터 읽기 요청 ... 211
      9. 데이터 저장 요청 ... 212
      10. 압축 처리된 I/O 요청 ... 213
   Section 05 I/O 완료 처리 과정 ... 214
      1. I/O 스택 ... 214
      2. IRP 완료를 처리하기 위한 I/O 스택 설정 ... 216
      3. I/O 관리자의 역할 ... 223
      4. I/O 요청 완료의 과정 ... 229
      5. 완료 루틴의 호출 ... 233
   Section 06 I/O 요청 취소 ... 236
      1. I/O 요청 취소 과정 ... 236
      2. I/O 요청 취소 절차 ... 237
      3. I/O 요청 취소 시 문제점 ... 240
   Section 07 IRP 처리 규칙 ... 241
   Section 08 I/O 요청 처리 시 주의 사항 ... 246
      참고 : IoSkipCurrentStackLocation()의 동작 과정 ... 248
07 가상 메모리 관리자
   Section 01 가상 메모리의 탄생 배경 ... 252
      1. 가상 메모리가 왜 유용한가? ... 252
      2. 가상 메모리 동작 방식 ... 254
   Section 02 가상 메모리 관리자의 기능 ... 255
   Section 03 프로세스의 주소 공간 ... 256
      1. 사용자 주소 영역과 시스템 주소 영역 ... 257
      2. 시스템 주소 공간의 레이아웃 ... 259
   Section 04 물리 메모리 관리 ... 263
      1. 페이지 프레임과 페이지 프레임 데이터베이스 ... 263
      2. 페이지 교체 알고리즘 ... 267
      3. 섹션 오브젝트 ... 269
   Section 05 가상 주소의 변환 ... 270
      1. 페이지 테이블 ... 270
      2. 가상 주소를 물리 주소로의 변환 ... 273
      3. VAD(Virtual Address Descriptor) ... 276
   Section 06 메모리 매핑된 파일의 지원 ... 279
      1. PPT와 PPTE ... 284
      2. PPT 설계상의 문제점 ... 288
      3. 카피 온 라이트 ... 289
      4. 섹션과 뷰 ... 292
      5. 파일 매핑 구조체 ... 293
   Section 07 페이징 ... 294
      1. 워킹 세트 ... 295
      2. 밸런스 세트 관리자 ... 296
      3. Modified Page Writer와 Mapped Page Write ... 298
   Section 08 페이지 오류 처리 ... 300
      1. MiResolvePageFileFault() 함수 ... 301
      2. MiResolveTransitionFault() 함수 ... 302
      3. MiDispatchFault() 함수 ... 302
      4. MiResolveDemandZeroFault() 함수 ... 303
   Section 09 파일 시스템 드라이버와의 통신 ... 305
      참고 : 드라이버 내부에서 파일 열기 ... 308
08 캐시 관리자
   Section 01 논리적 블록 캐싱과 가상 블록 캐싱 ... 312
   Section 02 캐시 관리자가 제공하는 기능 ... 314
      1. 시스템 전체에 걸친 캐시 기능 ... 314
      2. 미리 읽기 기능 ... 314
      3. 지연 쓰기 기능 ... 315
   Section 03 캐시 인터페이스 ... 316
      1. 복사 인터페이스 ... 316
      2. 고정 인터페이스 ... 318
      3. MDL 인터페이스 ... 319
   Section 04 데이터 읽기/쓰기 캐싱 ... 320
      1. 데이터 읽기 동작 ... 321
      2. 데이터 저장 동작 ... 324
   Section 05 주요 데이터 구조체 ... 327
      1. 파일 오브젝트 내의 주요 필드 ... 327
        참고 : Sharde Reader와 Exclusive Writer의 차이점 ... 330
      2. 캐시 맵 ... 333
      3. 버퍼 컨트롤 블록 ... 334
   Section 06 파일 크기에 대한 고려 사항 ... 335
   Section 07 가상 주소 컨트롤 블록 배열 ... 338
   Section 08 공유된 캐시 맵과 독립된 캐시 맵 ... 341
   Section 09 캐싱의 사용을 위해 필요한 작업 ... 344
      1. Fast I/O ... 344
        참고 : Fast I/O 구현 필요성에 대해서 ... 346
      2. 파일을 열 때 처리하는 작업 ... 347
   Section 10 캐싱의 종료 ... 349
      1. I/O 제거 요청 ... 349
      2. I/O 종료 요청 ... 351
   Section 11 VMM 및 I/O 관리자와의 통신 ... 352
      1. VMM과의 통신 ... 352
      2. I/O 관리자와의 통신 ... 354
   Section 12 미리 읽기 기능 ... 355
   Section 13 지연 쓰기 기능 ... 358
09 드라이버 작성 필수 예제 Filemon
   Section 01 드라이버 개발 절차 ... 362
      1. 개발 내용 분석 ... 362
      2. 자료 수집 ... 353
      3. 관련 지식 습득 ... 364
        참고 : 드라이버 개발 시 하드웨어 스펙 점검은 필수! ... 366
      4. 샘플 프로그램 분석 ... 366
      5. 전체 구성도 작성 ... 368
      6. 전체 흐름도 작성 ... 368
      7. 세부 순서도 작성 ... 369
      8. 코딩과 디버깅 ... 369
        참고 : 소스를 주시면 안 될까요? ... 370
      9. 작업 일지 작성 ... 371
   Section 02 Filemon 예제 분석 ... 372
      1. Filemon의 전체 구조 ... 373
      2. 주요 구조체 설명 ... 375
      3. 주요 함수 설명 ... 380
Special Page : 좋은 드라이버 개발자를 위한 제언 ... 385
      1. 프로젝트와 관련된 지식을 습득하라
      2. 문서를 작성하는 것은 기본
      3. 전문가가 되라
10 파일 액세스 제어용 드라이버 개발하기
   Section 01 드라이버의 개발 절차 ... 394
      1. 관련 자료 수집 ... 394
      2. 주요 기능 정리 ... 396
      3. 새로운 구조체 생성 ... 396
      4. 전체 구성도 설계 ... 397
        참고 : SecuPF에 대해서 ... 398
      5. 기본 흐름도 설계 ... 399
        참고 : 필자가 개발한 드라이버의 기본 구조 ... 400
      6. 세부 순서도 작성 ... 402
   Section 02 SecuPF 함수 ... 404
      1. DriverEntry() 함수 ... 404
        참고 : 왜 Fast I/O 디스패치 루틴을 등록해야 하는가? ... 410
      2. 기본 함수들(Create, Close, Unload 함수) ... 414
      3. 애플리케이션과 통신 ... 419
      4. 볼륨 후킹 ... 425
      5. Fast I/O 함수들 ... 433
      6. 파일의 전체 경로 얻기 ... 435
      7. 폴더 내의 파일 접근을 제어하는 함수 ... 443
   Section 03 SecuPF 드라이버 개선법 ... 450
11 실시간 암복호화
   Section 01 SecuEFS 드라이버란? ... 456
   Section 02 드라이버 개발 절차 ... 457
      1. 기본 개념 ... 457
      2. 관련 자료 수집 ... 463
      3. 주요 기능 정리 ... 464
      4. 구조체 정보 변경 ... 465
      5. 전체 구성도 설계 ... 467
      6. 기본 흐름도 ... 469
      7. 세부 순서도 설계 ... 474
   Section 03 실시간 암복호화 드라이버의 동작 ... 477
      1. DriverEntry() 함수 ... 477
        참고 : 초기 SecuEFS 버전과 다른 점 ... 479
      2. SecuEFSDeviceRoutine() 함수 ... 480
      3. SecuEFSFastloDeviceControl() 함수 ... 481
      4. SecuEFSHookRoutine() 함수 ... 483
      5. SecuEFSHookDone() ... 492
        참고 : 과연 마지막 IRP_MJ_CLOSE는 호출되는가? ... 496
   Section 04 SecuEFS 드라이버의 개선점 ... 500
12 폴더 숨기기 예제
   Section 01 SecuHF 드라이버의 개요 ... 504
      1. IRP_MN_QUERY_DIRECTORY ... 505
      2. IRP_MN_NOTIFY_CHANGE_DIRECTORY ... 508
   Section 02 드라이버 개발 절차 ... 510
      1. 관련 자료 수집 ... 510
      2. 주요 기능 정리 ... 511
      3. 구조체 정의 ... 512
      4. 전체 구성도 설계 ... 514
      5. 전체 흐름도 작성 ... 515
      6. 세부 순서도 작성 ... 519
   Section 03 폴더 숨김 드라이버의 내부 코드 ... 522
      1. DriverEntry() 함수 ... 522
      2. SecuHFFast1oDeviceControl() 함수 ... 523
      3. 폴더 숨기기 절차 ... 529
   Section 04 SecuHF 드라이버의 개선점 ... 537
Appendix(부록)
   Appendix A 디바이스 드라이버 컴파일하기 ... 540
   Appendix B 파일 시스템 필터 드라이버 작성 시 주의할 점 ... 561
   Appendix C 시스템 부팅 절차 ... 575
   Appendix D Attach 함수 ... 584
찾아보기 ... 592
닫기