Windows Internals 7/e 세트 [Windows Internals 7/e Vol.1+Windows Internals 7/e Vol.2]
- 지은이안드레아 알레비(Andrea Allievi), 알렉스 이오네스쿠(Alex Ionescu), 파벨 요시포비치(Pavel Yosifovich), 마크 러시노비치(Mark Russinovich), 데이비드 솔로몬(David A. Solomon)
- 옮긴이안랩 기반기술팀, 김점갑
- ISBN : SET0000000011
- 130,000원
- 2023년 12월 22일 펴냄
- 페이퍼백 | 2,480쪽 | 188*235mm
- 시리즈 : 윈도우 시스템 프로그래밍
책 소개
세트 구성: 전2권
1) 『Windows Internals 7/e Vol.1』
2) 『Windows Internals 7/e Vol.2』
『Windows Internals 7/e Vol.1』 소개
모바일 플랫폼을 포괄하는 마이크로소프트 윈도우 10과 윈도우 서버 2016 운영체제를 완벽하게 반영한 필수 가이드다. 핵심 구성 요소인 프로세스와 스레드, 메모리 관리를 다룬다. 그리고 더욱 관심이 높아지고 있는 보안 분야를 다루는 시스템 아키텍처의 내부 동작 방법을 이해할 수 있다. 고급 컴퓨터 개발자와 보안 연구가, 시스템 관리자를 위한 윈도우 운영체제의 설계 철학을 엿볼 수 있는 바이블이다.
이 책의 대상 독자
이 책은 독자가 파워유저 수준의 윈도우 작업에 익숙하며, CPU 레지스터와 메모리, 프로세스, 스레드와 같은 운영체제 및 하드웨어 개념을 기본적으로 이해하고 있다고 가정한다. 함수와 포인터, C 프로그래밍 언어 구문에 대한 이해는 일부 절에서 유용하다.
이 책의 구성
제6판과 동일하게 2권으로 나뉘어 있으며, 이 책이 첫 번째 권이다.
1장, '개념과 툴'에서는 윈도우 내부 개념에 대한 일반적인 소개를 하고, 책 전반에 걸쳐 사용되는 주요 툴을 소개한다. 책의 나머지 부분에 필요한 배경 지식을 제공하기 때문에 1장을 먼저 읽는 것이 중요하다.
2장, '시스템 아키텍처'에서는 윈도우를 구성하는 아키텍처와 주요 구성 요소를 보여주고, 이들을 심도 있게 알아본다. 이들 개념 중 일부는 후속 장에서 좀 더 세부적으로 다룬다.
3장, '프로세스와 잡'에서는 윈도우에서 프로세스가 구현되는 방법과 이를 처리하는 다양한 방법을 자세히 설명한다. 또한 잡은 프로세스 집합을 제어하고 윈도우 컨테이너 지원을 활성화하는 수단임을 설명한다.
4장, '스레드'에서는 윈도우에서 스레드를 관리하고 스케줄하며 조작하는 방법을 세부적으로 설명한다.
5장, '메모리 관리'에서는 메모리 관리자가 물리적 메모리와 가상 메모리를 사용하는 방법과 프로세스와 드라이버가 비슷하게 메모리를 조작하고 사용할 수 있는 다양한 방법을 보여준다.
6장, 'I/O 시스템'에서는 윈도우의 I/O 시스템이 어떻게 작동하고 I/O 주변 장치와 작업하기 위한 메커니즘을 제공하는 디바이스 드라이버와 어떻게 통합되는지 살펴본다.
7장, '보안'에서는 익스플로잇에 대처하기 위해 시스템의 일부가 된 완화책을 비롯해 윈도우에 내장된 다양한 보안 메커니즘을 상세히 설명한다.
『Windows Internals 7/e Vol.2』 소개
고급 컴퓨팅 전문가를 위한 이 책은 윈도우 핵심 구성 요소가 내부적으로 어떻게 작동하는지에 대한 최신 안내서다. 고급 개발자는 더욱 강력하고 확장 가능한 소프트웨어를 개발하고, 관리자는 복잡한 시스템 및 성능 문제를 자세히 살펴보고, 보안 담당자는 시스템을 보호할 수 있다. 이번 7판은 2021년 5월(21년 상반기) 윈도우 10 및 윈도우 서버(2022년, 2019년, 2016년) 업데이트를 반영했다. 하이퍼-V에 대한 광범위한 내용과 함께 부팅 프로세스, 새로운 스토리지 기술, 윈도우 시스템 및 관리 메커니즘에 대한 새로운 챕터가 추가됐다. 윈도우 소스코드에 대한 내부자 액세스를 기반으로 독보적인 인사이트를 제공하며, 최신 디버깅 도구를 사용한 실전 실험을 통해 윈도우의 내부 동작을 직접 보여준다. 윈도우 10과 동일한 핵심 기술을 기반으로 하는 새로운 사용자 인터페이스 디자인 요소를 도입한 윈도우 11을 통해 독자들은 컴퓨팅의 새로운 미래에 대비할 수 있다.
추천의 글
큰 성공을 거둔 윈도우 3.1 운영체제의 내부를 사용하고 살펴본 필자는 1993년 마이크로소프트가 윈도우 NT 3.1을 출시했을 때 세상을 바꿀 윈도우 3.1의 잠재력을 즉시 알아챘다. 윈도우 NT의 아키텍트이자 엔지니어링 리더였던 데이비드 커틀러는 안전하고 안정적이며 확장성이 뛰어나면서도 사용자 인터페이스와 소프트웨어 실행 기능이 이전 버전과 동일한 윈도우 버전을 만들었다. 헬렌 커스터의 책 『Inside Windows NT』(Microsoft Press, 1992)는 디자인과 아키텍처에 대한 훌륭한 지침서였지만 실제 작동에 대해 더 깊이 있게 다룬 책이 필요하고 수요가 있다고 생각했다. 데이비드 커틀러의 이전 개발에 대한 최종 가이드인 『VAX/VMS Internals and Data Structures』(Digital Press, 1984)는 텍스트로 얻을 수 있는 소스코드에 가까운 책이었고, 필자는 그 책의 윈도우 NT 버전을 집필하기로 생각했다.
하지만 진척은 더디기만 했다. 박사 학위를 마치고 작은 소프트웨어 회사에서 경력을 시작하느라 바빴기 때문이다. 윈도우 NT에 대해 배우고자 문서를 읽고 코드를 리버스엔지니어링하고, Regmon 및 Filemon과 같은 시스템 모니터링 도구를 코딩하고, 이를 사용해 윈도우 NT의 작동 방식을 내부적으로 살펴봄으로써 구조를 이해하는 데 도움이 되는 도구를 개발했다. 그렇게 배운 지식을 윈도우 NT 관리자를 위한 잡지인
이 책의 마감일은 풀타임 업무와 창업한 윈터널스 소프트웨어(Winternals Software)의 시스인터널스(Sysinternals)(당시 NT인터널스) 프리웨어 및 상용 소프트웨어를 작성하느라 집필이 더디게 진행됐다. 그러던 중 1996년 데이브 솔로몬(Dave Solomon)이 『Inside Windows NT, Second Edition』(Microsoft Press, 1997)을 출간했을 때 충격을 받았다. 이 책이 인상적이면서도 실망스러웠다. 헬렌의 책을 완전히 재집필한 이 책은 계획했던 대로 윈도우 NT의 내부를 더 깊고 폭넓게 다루고 있었으며, 윈도우 NT 리소스 키트와 디바이스 드라이버 개발 키트(DDK)의 기본 제공 도구 및 진단 유틸리티를 사용해 주요 개념과 동작을 시연하는 새로운 실습을 포함하고 있었다. 그는 기준을 매우 높게 끌어올렸기 때문에 그가 달성한 품질과 수준에 맞는 책을 쓴다는 것은 내가 계획했던 것보다 훨씬 더 큰 의미가 있다는 것을 알았다.
나는 윈도우 콘퍼런스 강연을 통해 데이브(Dave)를 알고 있었기 때문에, ‘피할 수 없다면 즐겨라’라는 속담처럼 책이 출간된 지 몇 주 만에 데이브에게 다음 판의 공동 집필을 제안하는 이메일을 보냈다. 이 책은 당시 윈도우NT 5라고 불렸고 나중에 윈도우2000으로 이름이 바뀌게 될 내용을 담고 있었다. 데이브가 포함하지 않은 주제에 대한 나의 NT 내부 칼럼을 기반으로 한 새로운 장을 추가하고, 나의 시스인터널 도구를 사용한 새로운 실습에 대한 글도 쓰기로 했다. 거래를 성사시키고자 책과 함께 배포하는 일반적인 소프트웨어 배포 방식인 CD에 전체 시스인터널즈 도구 모음을 포함시킬 것을 제안했다.
데이브는 흔쾌히 동의했다. 하지만 먼저 마이크로소프트의 승인을 얻어야 했다. 나는 윈도우 NT 워크스테이션과 윈도우 NT 서버가 레지스트리 설정에 따라 동작이 다른 동일한 코드라는 사실을 공개적으로 폭로해 마이크로소프트의 홍보에 어려움을 겪은 적이 있었다. 데이브는 윈도우 NT 소스 전체에 대한 액세스 권한이 있었지만 나는 그렇지 않았고 문서화되지 않은 API에 의존하는 시스인터널스나 윈터널스 소프트웨어에 지적 재산권 문제를 일으키지 않고자 계속 그렇게 하고 싶었다. 데이브가 마이크로소프트에 요청했을 때 나는 주요 윈도우 엔지니어들과의 관계를 회복하고 있었고 마이크로소프트도 암묵적으로 승인했기 때문에 운이 좋은 시기였다.
데이브와 함께 『Inside Windows 2000』을 집필하는 일은 정말 즐거웠다. 우연의 일치인지 모르겠지만 데이브는 나와 20분 정도 떨어진 곳에 살았다(나는 코네티컷(Connecticut) 주 댄버리(Danbury)에 살았고 데이브는 코네티컷 주 셔먼(Sherman)에 살았다). 우리는 서로의 집을 방문해 마라톤 글쓰기 세션을 진행하면서 함께 윈도우 내부를 탐색하고, 괴상한 농담과 말장난에 웃고, 기술적 질문을 던져 답을 찾고자 경쟁하곤 했는데, 데이브는 소스코드를 샅샅이 뒤지고 나는 디스어셈블러, 디버거, 시스인터널스 도구를 사용했다.
그렇게 해서 나는 역사상 가장 상업적으로 성공한 운영체제 중 하나의 내부 작동을 설명하는 결정적인 책의 공동 저자가 됐다. 윈도우 XP와 윈도우 비스타를 다룬 5판에는 알렉스 이오네스쿠를 참여시켰다. 알렉스는 세계 최고의 리버스 엔지니어이자 운영체제 전문가로, 가독성과 세부 사항에 대한 당사의 높은 기준에 부합하거나 그 이상으로 책의 폭과 깊이를 더해줬다. 새로운 기능과 하위 시스템으로 성장하는 윈도우 자체와 함께 책의 범위가 넓어지면서 6판은 5판의 단행본 출판 한계를 초과해 2권으로 나눴다.
6판 집필이 시작될 무렵 나는 이미 애저로 자리를 옮겼고 7판을 준비할 무렵에는 더 이상 책에 기여할 시간이 없었다. 데이브 솔로몬은 은퇴했고 윈도우가 몇 년마다 주요 릴리스와 버전 번호로 출시되던 것에서 윈도우 10이라는 이름으로 불리며 지속적으로 기능 업그레이드를 통해 출시되면서 책을 업데이트하는 작업은 더욱 어려워졌다. 파벨 요시포비치(Pavel Yosifovitch)가알렉스의 1권을 도와줬지만, 그 역시 다른 프로젝트로 바빠 2권에 참여하지 못했다. 알렉스 역시 자신의 스타트업 크라우드스트라이크(CrowdStrike)로 바빴기 때문에 2권에 참여할 수 있을지 확신할 수 없었다.
다행히 안드레아가 도와줬다. 알렉스와 함께 2장에서 시작 및 종료 프로세스, 레지스트리 하위 시스템, UWP 등 시스템의 광범위한 부분을 업데이트했다. 단순히 새로워진 내용뿐 아니라 하이퍼V, 캐싱 및 파일 시스템, 진단 및 추적에 대해 자세히 설명하는 3개의 새로운 장도 추가했다. 역사상 가장 중요한 소프트웨어 중 하나인 윈도우의 내부 작동에 대해 기술적으로 가장 심도 있고 정확하게 설명하는 윈도우 내부 책 시리즈의 명성은 안전하며, 내 이름이 여전히 목록에 남아 있다는 사실에 자부심을 느낀다.
내 경력에서 기억에 남는 순간은 데이비드 커틀러(David Cutler)에게 『Inside Windows 2000』의 서문을 써 달라고 부탁했을 때였다. 데이비드 솔로몬과 나는 윈도우 엔지니어들을 만나고자 몇 차례 마이크로소프트를 방문한 적이 있었고, 그중 몇 차례 데이비드를 만난 적이 있었다. 하지만 그가 동의할지 몰랐기 때문에 그가 동의했을 때 매우 기뻤다. 데이비드에게 부탁했을 때와 비슷한 입장이 돼 반대편에 서 있는 지금이 조금은 믿기지 않는데, 기회가 주어져 영광이다. 내가 쓴 추천의 글을 통해 이 책이 『Inside Windows 2000』 구매자들에게 데이비드 커틀러의 책이 그랬던 것처럼 신뢰할 수 있고 명확하고 종합적이라는 믿음을 드릴 수 있기를 기대한다.
─마크 러시노비치(Mark E. Russinovich),
마이크로소프트 애저 최고 기술 책임자 겸 기술 펠로우
이 책에서 다루는 내용
◆ ALPC, 객체 관리자, 동기화, WNF, WoW64 및 프로세서 실행 모델을 포함해 장치 드라이버 및 애플리케이션을 제공하기 위한 시스템 메커니즘 이해
◆ 트랩 프로세싱, 세그먼테이션 및 사이드 채널(side channel) 보안 취약점을 포함한 기본 하드웨어 아키텍처 분석
◆ OS 취약점으로부터 윈도우 가상화 및 가상화 기반 보안(VBS)이 보호하는 방법 이해
◆ 레지스트리, 윈도우 서비스, WMI, 작업 스케줄링을 포함한 주요 관리 및 구성 메커니즘 이해
◆ 윈도우 이벤트 추적(ETW) 및 DTrace와 같은 분석 서비스 이해
◆ 캐시 관리자와 파일 시스템 드라이버가 어떻게 상호작용해 파일, 디렉터리 및 디스크를 안정적으로 지원 이해(NVDIMM(영구 메모리) DAX장치 포함)
◆ NTFS, ReFS 및 기타 윈도우 파일 시스템 이해
◆ 윈도우 시작/종료 작업 및 부팅 흐름에 관련된 OS 구성 요소 분석
◆ UEFI 기반 보안 부팅, 측정된 부팅 및 보안 부팅 분석
이 책의 대상 독자
독자가 고급 사용자 수준의 윈도우 환경에 익숙하고 CPU 레지스터, 메모리, 프로세스, 스레드와 같은 운영체제 및 하드웨어 개념을 기본적으로 이해하고 있다고 가정한다. 함수, 포인터 및 유사한 C 프로그래밍 언어 구조에 대한 기본적인 이해가 있어야 내용을 이해하기에 유리하다.
이 책의 구성
7판은 6판과 마찬가지로 2권으로 나뉘며, 지금 이 책이 두 번째 책이다.
8장, ‘시스템 메커니즘’에서는 ALPC, 객체 관리자, 동기화 루틴 등 운영체제가 디바이스 드라이버와 애플리케이션에 주요 서비스를 제공하는 데 사용하는 중요한 내부 메커니즘에 대한 정보를 제공한다. 또한 트랩 처리, 세분화 및 사이드 채널 취약성을 비롯해 윈도우가 실행되는 하드웨어 아키텍처와 이를 해결하는 데 필요한 해결 방법에 대한 세부 정보를 알아본다.
9장, ‘가상화 기술’에서는 윈도우 OS가 최신 프로세서가 제공하는 가상화 기술을 사용해 사용자가 동일한 시스템에서 여러 가상 머신을 생성하고 사용할 수 있게 하는 방법을 설명한다. 또한 가상화는 새로운 수준의 보안을 제공하고자 윈도우에서 폭넓게 사용한다. 따라서 9장에서는 보안 커널 및 격리된 사용자 모드를 자세히 알아본다.
10장, ‘관리, 진단, 추적’에서는 관리, 구성, 진단을 위해 운영체제에서 구현된 기본 메커니즘을 자세히 설명한다. 특히 윈도우 레지스트리, 윈도우 서비스, WMI 및 작업 스케줄링과 함께 윈도우용 이벤트 추적ETW 및 DTrace와 같은 진단 서비스를 살펴본다.
11장, ‘캐싱과 파일 시스템’에서는 가장 중요한 ‘스토리지’ 구성 요소인 캐시 관리자와 파일 시스템 드라이버가 어떻게 상호작용해 파일, 디렉터리 및 디스크 장치에서 효율적이고 안전한 방식으로 작동하는지 보여준다. 또한 윈도우에서 지원하는 파일 시스템, 특히 NTFS와 ReFS를 자세히 알아본다.
12장, ‘시작과 종료’에서는 시스템을 시작하고 종료할 때 발생하는 작업 흐름과 부팅 흐름에 관여하는 운영체제 구성 요소를 살펴본다. 또한 보안 부팅, 측정 부팅 및 보안 실행과 같은 UEFI의 새로운 기술도 살펴본다.
목차
목차
- 『Windows Internals 7/e Vol.1』
- 1장. 개념과 툴
- 윈도우 운영체제 버전
- 윈도우 10과 향후 윈도우 버전
- 윈도우 10과 원코어
- 기본 개념과 용어
- 윈도우 API
- 서비스와 함수, 루틴
- 프로세스
- 스레드
- 잡
- 가상 메모리
- 커널 모드와 유저 모드
- 하이퍼바이저
- 펌웨어
- 터미널 서비스와 다중 세션
- 객체와 핸들
- 보안
- 레지스트리
- 유니코드
- 윈도우 내부 들여다보기
- 성능 모니터와 자원 모니터
- 커널 디버깅
- 윈도우 소프트웨어 개발 킷
- 윈도우 드라이버 킷
- Sysinternals 툴
- 결론
- 윈도우 운영체제 버전
- 2장. 시스템 아키텍처
- 요구 사항과 설계 목표
- 운영체제 모델
- 아키텍처 개요
- 이식성
- 대칭형 멀티프로세싱
- 확장성
- 클라이언트와 서버 버전의 차이
- 체크드 빌드
- 가상화 기반의 보안 아키텍처 개요
- 핵심 시스템 컴포넌트
- 환경 서브시스템과 서브시스템 DLL
- 기타 서브시스템
- 익스큐티브
- 커널
- 하드웨어 추상화 계층
- 디바이스 드라이버
- 시스템 프로세스
- 결론
- 3장. 프로세스와 잡
- 프로세스 생성
- CreateProcess* 함수 인자
- 윈도우 최신 프로세스 생성
- 다른 종류의 프로세스 생성
- 프로세스 내부 구조
- 보호 프로세스
- 보호 프로세스 라이트(PPL)
- 서드파티 PPL 지원
- 최소 프로세스와 피코 프로세스
- 최소 프로세스
- 피코 프로세스
- 트러스트릿(안전한 프로세스)
- 트러스트릿 구조체
- 트러스트릿 정책 메타데이터
- 트러스트릿 속성
- 시스템 내장 트러스트릿
- 트러스트릿 신분
- 격리된 유저 모드 서비스
- 트러스트릿 접근 가능 시스템 호출
- CreateProcess 흐름
- 1단계: 매개변수와 플래그의 유효성 검사 및 변환
- 2단계: 실행할 이미지 열기
- 3단계: 윈도우 익스큐티브 프로세스 객체 생성
- 4단계: 초기 스레드와 그 스택 및 컨텍스트 생성
- 5단계: 윈도우 서브시스템 특정적인 초기화 수행
- 6단계: 초기 스레드의 실행 시작
- 7단계: 새 프로세스의 컨텍스트에서 프로세스 초기화 수행
- 프로세스 종료
- 이미지 로더
- 이른 시점의 프로세스 초기화
- DLL 이름 결정과 리디렉션
- 로드된 모듈의 데이터베이스
- 임포트 파싱
- 포스트 임포트 프로세스 초기화
- 스위치백
- API 세트
- 잡
- 잡 제약
- 잡과 작업
- 중첩 잡
- 윈도우 컨테이너(서버 실로)
- 결론
- 프로세스 생성
- 4장. 스레드
- 스레드 생성
- 스레드 내부 구조
- 데이터 구조체
- 스레드의 탄생
- 스레드 활동성 검사
- 보호 프로세스 스레드의 제약
- 스레드 스케줄링
- 윈도우 스케줄링의 개요
- 우선순위 수준
- 스레드 상태
- 디스패처 데이터베이스
- 퀀텀
- 우선순위 상승
- 컨텍스트 전환
- 스케줄링 시나리오
- 유휴 스레드
- 스레드 일시 중지
- (딥) 프리즈
- 스레드 선정
- 멀티프로세서 시스템
- 멀티프로세서 시스템에서의 스레드 선정
- 프로세서 선정
- 이기종 스케줄링(big.LITTLE)
- 그룹 기반의 스케줄링
- 동적으로 공정한 공유 스케줄링
- CPU 비율 제한
- 동적 프로세서 추가와 교체
- 작업자 팩토리(스레드 풀)
- 작업자 팩토리 생성
- 결론
- 5장. 메모리 관리
- 메모리 관리자 소개
- 메모리 관리자 컴포넌트
- 큰 페이지와 작은 페이지
- 메모리 사용량 살펴보기
- 내부 동기화
- 메모리 관리자가 제공하는 서비스
- 페이지 상태와 메모리 할당
- 커밋양과 커밋 제한
- 메모리 락킹
- 할당 단위
- 공유 메모리와 맵 파일
- 메모리 보호
- 데이터 실행 방지
- Copy-on-Write
- 주소 윈도우 확장
- 커널 모드 힙(시스템 메모리 풀)
- 풀 크기
- 풀 사용량 모니터링
- 룩 어사이드 리스트
- 힙 관리자
- 프로세스 힙
- 힙 유형
- NT 힙
- 힙 동기화
- 저단편화 힙
- 세그먼트 힙
- 힙 보안 특징
- 힙 디버깅 특징
- 페이지힙
- 폴트 톨러런트 힙
- 가상 주소 공간 배치
- x86 주소 공간 배치
- x86 시스템 주소 공간 배치
- x86 세션 공간
- 시스템 페이지 테이블 엔트리
- ARM 주소 공간 배치
- 64비트 주소 공간 배치
- x64 가상 주소 제약
- 동적 시스템의 가상 주소 관리
- 시스템 가상 주소 공간 할당량
- 사용자 주소 공간 배치
- 주소 변환
- x86 가상 주소 변환
- 변환 룩 어사이드 버퍼(TLB)
- x64 가상 주소 변환
- ARM 가상 주소 변환
- 페이지 폴트 핸들링
- 유효하지 않은 PTE
- 프로토타입 PTE
- 인 페이징 I/O
- 페이지 폴트 충돌
- 클러스터 페이지 폴트
- 페이지 파일
- 커밋양과 시스템 커밋 제한
- 커밋양과 페이지 파일 크기
- 스택
- 유저 스택
- 커널 스택
- DPC 스택
- 가상 주소 디스크립터(VAD)
- 프로세스 VAD
- VAD 교체
- NUMA
- 섹션 객체
- 워킹셋
- 요구 페이징
- 논리적 프리패처와 레디부트
- 배치 정책
- 워킹셋 관리
- 밸런스 셋 관리자와 스와퍼
- 시스템 워킹셋
- 메모리 통지 이벤트
- 페이지 프레임 번호 데이터베이스
- 페이지 리스트 다이내믹스
- 페이지 우선순위
- 변경 페이지 기록자와 맵 페이지 기록자
- PFN 데이터 구조
- 페이지 파일 예약
- 물리 메모리 제한
- 윈도우 클라이언트 메모리 제한
- 메모리 압축
- 압축 예제
- 압축 아키텍처
- 메모리 파티션
- 메모리 결합
- 탐색 단계
- 분류 단계
- 페이지 결합 단계
- 전용에서 공유 PTE로
- 결합 페이지 해제
- 메모리 엔클레이브
- 프로그램 인터페이스
- 메모리 엔클레이브 초기화
- 엔클레이브 구축
- 엔클레이브로 데이터 로드
- 엔클레이브 초기화
- 선행적 메모리 관리(슈퍼패치)
- 컴포넌트
- 트레이싱과 로깅
- 시나리오
- 페이지 우선순위와 균형 조절
- 견고한 성능
- 레디부스트
- 레디드라이브
- 프로세스 리플렉션
- 결론
- 메모리 관리자 소개
- 6장. I/O 시스템
- I/O 시스템 컴포넌트
- I/O 관리자
- 전형적인 I/O 처리
- 인터럽트 요청 레벨과 지연된 프로시저 호출
- 인터럽트 요청 레벨
- 지연된 프로시저 호출
- 디바이스 드라이버
- 디바이스 드라이버의 유형
- 드라이버의 구조
- 드라이버 객체와 디바이스 객체
- 장치 열기
- I/O 처리
- I/O의 유형
- I/O 요청 패킷
- 단일 계층 하드웨어 기반 드라이버로의 I/O 요청
- 계층적 드라이버에 대한 I/O 요청
- 스레드 비종속적 I/O
- I/O 취소
- I/O 완료 포트
- I/O 우선순위화
- 컨테이너 통지
- 드라이버 베리파이어
- I/O 관련 검증 옵션
- 메모리 관련 검증 옵션
- 플러그앤플레이 관리자
- 플러그앤플레이 지원 수준
- 장치 열거
- 디바이스 스택
- 플러그앤플레이를 위한 드라이버 지원
- 플러그앤 플레이 드라이버 설치
- 일반적인 드라이버 로드와 설치
- 드라이버 로딩
- 드라이버 설치
- 윈도우 드라이버 파운데이션
- 커널 모드 드라이버 프레임워크
- 유저 모드 드라이버 프레임워크
- 전원 관리자
- 연결 스탠바이와 모던 스탠바이
- 전원 관리자 동작
- 드라이버의 전원 동작
- 드라이버와 애플리케이션의 장치 전원 제어
- 전원 관리 프레임워크
- 전원 가용성 요청
- I/O 시스템 컴포넌트
- 결론
- 7장. 보안
- 보안 등급
- 신뢰성 있는 컴퓨터 시스템 평가 지침
- 공통 평가 기준
- 보안 시스템 구성 요소
- 가상화 기반의 보안
- 자격증명 가드
- 장치 가드
- 객체 보호
- 접근 검사
- 보안 식별자
- 가상 서비스 계정
- 보안 디스크립터와 접근 제어
- 동적 접근 제어
- AuthZ API
- 조건부 ACE
- 계정 권한과 특권
- 계정 권한
- 특권
- 슈퍼 특권
- 프로세스와 스레드의 접근 토큰
- 보안 감사
- 객체 접근 감사
- 전역 감사 정책
- 고급 감사 정책 설정
- 앱컨테이너
- UWP 앱의 개요
- 앱컨테이너
- 로그온
- Winlogon 초기화
- 사용자 로그온 과정
- 보장된 인증
- 윈도우 생체 인식 프레임워크
- 윈도우 헬로
- 사용자 계정 제어와 가상화
- 파일 시스템과 레지스트리 가상화
- 상승
- 취약점 완화
- 프로세스 완화 정책
- 제어 흐름 무결성
- 보안 보장
- 애플리케이션 식별
- 앱락커
- 소프트웨어 제한 정책
- 커널 패치 보호
- 패치가드
- 하이퍼가드
- 결론
- 보안 등급
- 『Windows Internals 7/e Vol.2』
- 8장. 시스템 메커니즘
- 프로세서 실행 모델
- 세그먼테이션
- 작업 상태 세그먼트
- 하드웨어 사이드 채널 취약점
- 비순차적 실행
- CPU 분기 예측기
- CPU 캐시
- 사이드 채널 공격
- 윈도우의 사이드 채널 공격 완화
- 커널 가상 주소 섀도우
- 하드웨어 간접 분기 제어(IBRS, IBPB, STIBP, SSBD)
- 리트폴린과 임포트 최적화
- STIBP 페어링
- 트랩 디스패칭
- 인터럽트 디스패칭
- 라인 기반 인터럽트와 메시지 기반 인터럽트
- 타이머 처리
- 시스템 작업자 스레드
- 예외 디스패칭
- 시스템 서비스 핸들링
- WoW64(윈도우 안의 윈도우)
- WoW64 코어
- 파일 시스템 리다이렉션
- 레지스트리 리다이렉션
- AMD64 플랫폼에서 x86 시뮬레이션
- ARM
- 메모리 모델
- ARM64 플랫폼에서 ARM32 시뮬레이션
- ARM64 플랫폼에서 X86 시뮬레이션
- 객체 관리자
- 이그제큐티브 객체
- 객체 구조체
- 동기화
- High-IRQL 동기화
- Low-IRQL 동기화
- 고급 로컬 프로시저 호출
- 연결 모델
- 메시지 모델
- 비동기 작업
- 뷰, 영역, 섹션
- 속성
- 블롭, 핸들, 리소스
- 핸들 전달
- 보안
- 성능
- 전원 관리
- ALPC 다이렉트 이벤트 속성
- 디버깅과 추적
- 윈도우 알림 기능
- WNF 기능
- WNF 유저
- WNF 상태 이름과 저장소
- WNF 이벤트 기반 수집
- 유저 모드 디버깅
- 커널 지원
- 네이티브 지원
- 윈도우 서브시스템 지원
- 패키지 애플리케이션
- UWP 애플리케이션
- 센테니얼 애플리케이션
- 호스트 활동 관리자
- 상태 저장소
- 종속성 미니 저장소
- 백그라운드 작업 및 브로커 인프라
- 패키지 애플리케이션 설치와 시작
- 패키지 활성화
- 패키지 등록
- 결론
- 프로세서 실행 모델
- 9장. 가상화 기술
- 윈도우 하이퍼바이저
- 파티션, 프로세스, 스레드
- 하이퍼바이저 시작
- 하이퍼바이저 메모리 관리자
- 하이퍼V 스케줄러
- 하이퍼콜과 하이퍼바이저 TLFS
- 인터셉트
- 가상 인터럽트 컨트롤러(SynIC)
- 윈도우 하이퍼바이저 플랫폼 API와 EXO 파티션
- 중첩된 가상화
- ARM64 윈도우 하이퍼바이저
- 가상화 스택
- 가상 머신 관리자 서비스와 작업자 프로세스
- VID 드라이버와 가상화 스택 메모리 관리자
- 가상 머신(VM)의 탄생
- VMBus
- 가상 하드웨어 지원
- VA백드 가상 머신
- 가상화 기반 보안(VBS)
- 가상 신뢰 수준(VTL)과 가상 보안 모드(VSM)
- VSM에서 제공하는 서비스와 요구 사항
- 보안 커널
- 가상 인터럽트
- 보안 인터셉트
- VSM 시스템 콜
- 보안 스레드와 스케줄링
- 하이퍼바이저 적용 코드 무결성
- UEFI 런타임 가상화
- VSM 시작
- 보안 커널 메모리 관리자
- 핫패칭
- 격리된 유저 모드
- 트러스트렛 생성
- 보안 디바이스
- VBS 기반 엔클레이브
- 시스템 가드 런타임 증명
- 결론
- 윈도우 하이퍼바이저
- 10장. 관리, 진단, 추적
- 레지스트리
- 레지스트리 보기와 변경
- 레지스트리 사용
- 레지스트리 데이터 유형
- 레지스트리의 논리적 구조
- 애플리케이션 하이브
- 트랜잭션 레지스트리(TxR)
- 레지스트리 행위 모니터링
- 프로세스 모니터의 내부 구조
- 레지스트리 내부
- 하이브 개편
- 레지스트리 네임스페이스와 동작
- 안전한 저장소
- 레지스트리 필터링
- 레지스트리 가상화
- 레지스트리 최적화
- 윈도우 서비스
- 서비스 애플리케이션
- 서비스 계정
- 서비스 제어 관리자(SCM)
- 서비스 제어 프로그램
- 자동 시작 서비스 시작
- 지연된 자동 시작 서비스
- 트리거 시작 서비스
- 시작 에러
- 부팅 및 마지막 정상 승인 확인
- 서비스 실패
- 서비스 종료
- 공유 서비스 프로세스
- 서비스 태그
- 유저 서비스
- 패키지 서비스
- 보호된 서비스
- 작업 스케줄링과 UBPM
- 작업 스케줄러
- UBPM
- 작업 스케줄러 COM인터페이스
- 윈도우 관리 도구
- WMI 아키텍처
- WMI 공급자
- CIM과 MOF 언어
- 클래스 연관화
- WMI 구현
- WMI 보안
- 윈도우 이벤트 추적(ETW)
- ETW 초기화
- ETW 세션
- ETW 공급자
- 공급자 이벤트
- ETW 로그 스레드
- 이벤트 소비
- 시스템 로그
- ETW 보안
- 동적 트레이스(DTrace)
- 내부 아키텍처
- DTrace 타입 라이브러리
- 윈도우 에러 보고(WER)
- 유저 애플리케이션 크래시
- 커널 모드(시스템) 크래시
- 프로세스 행 감지
- 전역 플래그
- 커널 심
- 심 엔진 초기화
- 심 데이터베이스
- 드라이버 심
- 디바이스 심
- 결론
- 레지스트리
- 11장. 캐싱과 파일 시스템
- 용어
- 캐시 관리자의 주요 특징
- 단일, 중앙 집중형 시스템 캐시
- 메모리 관리자
- 캐시 일관성
- 가상 블록 캐싱
- 스트림 기반 캐싱
- 복구 가능 파일 시스템 지원
- NTFS MFT 작업 집합 기능 향상
- 메모리 파티션 지원
- 캐시의 가상 메모리 관리
- 캐시 크기
- 캐시 가상 크기
- 캐시 작업 집합 크기
- 물리적인 캐시 크기
- 캐시 데이터 구조
- 시스템 전역 캐시 데이터 구조
- 파일 단위 캐시 데이터 구조체
- 파일 시스템 인터페이스
- 캐시로 복사/캐시로부터의 복사
- 매핑 및 고정 인터페이스를 통한 캐싱
- 직접 메모리 액세스 인터페이스를 이용한 캐싱
- 패스트 I/O
- 미리 읽기와 나중 쓰기
- 지능형 미리 읽기
- 미리 읽기 기능 향상
- 재기록 캐싱과 지연 라이터
- 파일에 대한 지연 라이터 비활성화
- 캐시로 하여금 디스크에 즉시 쓰기 강제하기
- 맵 파일 플러시하기
- 쓰기 조절
- 시스템 스레드
- 비하인드 강제 쓰기와 낮은 우선순위 지연 라이터
- 동적 메모리
- 캐시 관리자 디스크 I/O 계정
- 파일 시스템
- 윈도우 파일 시스템 형식
- CDFS
- UDF
- FAT12, FAT16, FAT32
- exFAT
- NTFS
- ReFS
- 파일 시스템 드라이버 아키텍처
- 로컬 FSD
- 원격 FSD
- 파일 시스템 동작
- 명시적 파일 I/O
- 메모리 관리자의 변경 페이지 라이터와 맵드 페이지 라이터
- 캐시 관리자의 지연 라이터
- 캐시 관리자의 미리 읽기 스레드
- 메모리 관리자의 페이지 폴트 핸들러
- 파일 시스템 필터 드라이버와 미니필터
- 네임드 파이프 및 메일슬롯 필터링
- 리파스 포인트의 동작 제어
- 프로세스 모니터
- NT 파일 시스템(NTFS)
- 하이엔드 파일 시스템 요구 사항
- 복구 기능
- 보안
- 데이터 중복과 내결함성
- NTFS 고급 기능
- 다중 데이터 스트림
- 유니코드 기반의 이름
- 범용적인 인덱싱 기능
- 동적으로 수행되는 손상 클러스터 재할당
- 하드 링크
- 심볼릭(소프트) 링크와 정션
- 압축과 스파스 파일
- 로깅 변경
- 유저별 볼륨 쿼터
- 링크 추적
- 암호화
- POSIX 스타일의 삭제 의미
- 조각 모음
- 동적 파티셔닝
- 계층적 볼륨에 대한 NTFS 지원
- NTFS 파일 시스템 드라이버
- 디스크상의 NTFS 구조
- 볼륨
- 클러스터
- 마스터 파일 테이블
- 파일 레코드 번호
- 파일 레코드
- 파일 이름
- 터널링
- 상주와 비상주 속성
- 데이터 압축과 스파스 파일
- 스파스 데이터의 압축
- 비스파스 데이터 압축
- 스파스 파일
- 변경 저널 파일
- 인덱싱
- 객체 ID
- 쿼터 추적
- 통합 보안
- 리파스 포인트
- 스토리지 예약 및 NTFS 예약
- 트랜잭션 지원
- 격리
- 트랜잭션 API
- 디스크에서의 지원
- 로깅 지원
- NTFS 복구 지원
- 설계
- 메타데이터 로깅
- 로그 파일 서비스
- 로그 레코드 유형
- 복구
- 분석 패스
- 재실행 패스
- 취소 패스
- NTFS 불량 클러스터 복구
- 자가 복구
- 온라인 디스크 검사와 신속한 복구
- 암호화 파일 시스템
- 파일 최초 암호화
- 복호화 프로세스
- 암호화된 파일 백업
- 암호화된 파일 복사
- 비트락커 암호화 부하 분산
- 온라인 암호화 지원
- 직접 액세스(DAX) 디스크
- DAX 드라이버 모델
- DAX 볼륨
- DAX 볼륨 캐시와 넌캐시 I/O
- 실행 가능 이미지 매핑
- 블록 볼륨
- 파일 시스템 필터 드라이버 및 DAX
- DAX 모드 I/O 플러시
- 큰 페이지 및 대용량 페이지 지원
- 가상 PM 디스크 및 저장 공간 지원
- 복원 파일 시스템(ReFS)
- 민스토어 아키텍처
- B+ 트리의 물리적 레이아웃
- 할당자
- 페이지 테이블
- 민스토어 I/O
- ReFS 아키텍처
- ReFS 온디스크 구조
- 객체 ID
- 보안 및 변경 저널
- ReFS의 고급 기능
- 파일 차단 복제(스냅샷 지원)와 스파스 VDL
- ReFS 즉시 쓰기
- ReFS 복구 지원
- 누수 감지
- 기와식 자기 기록(SMR) 볼륨
- 계층적 볼륨 및 SMR에 대한 ReFS 지원
- 컨테이너 압축
- 압축 및 고스팅
- 스토리지 공간
- 스페이스 내부 아키텍처
- 스페이스가 제공하는 서비스
- 결론
- 12장. 시작과 종료
- 부팅 과정
- UEFI 부트
- BIOS 부팅 프로세스
- 보안 부팅
- 윈도우 부팅 관리자
- 부팅 메뉴
- 부팅 애플리케이션 시작
- 측정된 부팅
- 신뢰된 실행
- 윈도우 운영체제 로더
- iSCSI 부팅
- 하이퍼바이저 로더
- VSM 시작 정책
- 보안 실행
- 커널과 이그제큐티브 서브시스템 초기화
- 커널 초기화 단계 1
- Smss, Csrss, Wininit
- 레디부트
- 자동 시작 이미지
- 종료
- 하이버네이션 및 빠른 시작
- 윈도우 복원 환경(WinRE)
- 안전 모드
- 안전 모드에서 드라이버 로드
- 안전 모드 지원 유저 프로그램
- 부팅 상태 파일
- 결론
- 부팅 과정