深入解析Windows操作系統(tǒng) 第7版 卷1
定 價(jià):179.9 元
- 作者:帕維爾· 約西沃維奇(Pavel Yosifovich) 亞歷克斯·伊奧尼斯庫(Alex Ionescu)馬克·E.魯辛諾維奇(Mark E.Russinovich)大衛(wèi)·A·所羅門(David A. Solomon)
- 出版時(shí)間:2021/4/1
- ISBN:9787115556943
- 出 版 社:人民郵電出版社
- 中圖法分類:TP316.7
- 頁碼:636
- 紙張:
- 版次:01
- 開本:16開
本書基于Windows 10和Windows Server 2016編寫,深入解析Windows操作系統(tǒng)的系統(tǒng)架構(gòu)、進(jìn)程、線程、內(nèi)存管理等知識(shí),旨在幫助讀者了解Windows 10和Windows Server 2016操作系統(tǒng)內(nèi)部工作原理,使之在針對(duì)Windows平臺(tái)開發(fā)應(yīng)用程序時(shí),可以更好地理解不同設(shè)計(jì)機(jī)制間的關(guān)系。
本書先介紹Windows的基本概念和工具以及Windows的架構(gòu)和主要組件,然后詳細(xì)介紹進(jìn)程和作業(yè)、內(nèi)存管理、I/O系統(tǒng)等內(nèi)容,最后介紹Windows內(nèi)置的安全機(jī)制以及用于阻止濫用的各種緩解措施。
本書輔以大量實(shí)驗(yàn),并給出了具體步驟,可供讀者自行嘗試,讓他們通過內(nèi)核調(diào)試器、Sysinternals工具和專為本書內(nèi)容開發(fā)的其他工具一窺Windows的工作原理,進(jìn)而能夠?qū)⑦@些知識(shí)應(yīng)用于改進(jìn)應(yīng)用程序設(shè)計(jì)、調(diào)試以及系統(tǒng)性能和支持。
本書適合希望了解Windows 10和Windows Server 2016操作系統(tǒng)內(nèi)部工作原理的開發(fā)者、系統(tǒng)管理員及安全研究人員閱讀。
深入研究Windows系統(tǒng)架構(gòu)和內(nèi)部構(gòu)件,并了解核心組件在幕后的工作原理。
這本指南由微軟內(nèi)部專家團(tuán)隊(duì)撰寫,針對(duì)Windows 10和Windows Server 2016進(jìn)行了全面更新。
無論你是一名開發(fā)人員還是IT專業(yè)人士,都可以學(xué)到關(guān)于Windows如何運(yùn)作的關(guān)鍵的內(nèi)部觀點(diǎn)。
通過親身實(shí)踐,你將體驗(yàn)到Windows操作系統(tǒng)的內(nèi)部行為——獲取可用于改進(jìn)應(yīng)用程序設(shè)計(jì)、調(diào)試、系統(tǒng)性能和支持的知識(shí)。
本書將幫助讀者:
● 了解Windows系統(tǒng)架構(gòu)及其zui重要的實(shí)體,例如進(jìn)程和線程;
● 了解進(jìn)程如何管理資源以及在進(jìn)程執(zhí)行中如何調(diào)度線程;
● 觀察Windows如何管理虛擬和物理內(nèi)存;
● 深入了解Windows I/O系統(tǒng),了解設(shè)備驅(qū)動(dòng)程序如何工作并與系統(tǒng)的其余部分整合在一起;
● 學(xué)習(xí)Windows安全模型,了解它如何管理訪問、審核和shou權(quán),并了解Windows 10和Windows Server 2016中的新機(jī)制。
帕維爾·約西沃維奇(Pavel Yosifovich)是一位精通微軟技術(shù)和工具的開發(fā)者、講師,還是微軟 MVP 以及在線教育網(wǎng)站 Pluralsight 的簽約作者。
亞歷克斯·伊奧尼斯庫(Alex Ionescu) 是CrowdStrike 的 EDR 戰(zhàn)略副總裁,也是底層系統(tǒng)軟件、操作系統(tǒng)研究與內(nèi)核開發(fā)、 安全培訓(xùn)和逆向工程領(lǐng)域的專家。他曾在世界各地講授有關(guān) Windows 內(nèi)部機(jī)理的課程,并活躍于安全研究社區(qū),多次參加會(huì)議講座和 bug 賞金計(jì)劃。
馬克· E.魯辛諾維奇( Mark E.Russinovich)是 Microsoft Azure( 微軟的全球化、企業(yè)級(jí)云平臺(tái))的首席技術(shù)官。他是分布式系統(tǒng)和操作系統(tǒng)領(lǐng)域的專家,曾是 Winternals Software 公司的聯(lián)合創(chuàng)始人,并在該公司被微軟收購后加入了微軟。他還是 Sysinternals 工具的發(fā)明者和Sysinternals 網(wǎng)站的創(chuàng)立者。
大衛(wèi)· A . 所羅門(David A. Solomon)在其退休前的 20 余年里,不遺余力地為眾多開發(fā)者和 IT 專業(yè)人士講授有關(guān) Windows 內(nèi)核接口的課程。 在出版了自己的第一本書 Windows NT for OpenVMS Professionals 后,他撰寫了 Inside Windows NT 的第 2 版,并與馬克·E.魯辛諾維奇合著了第3 ~ 6 版。他曾多次在微軟的大會(huì)上發(fā)言,并于 1993 年和 2005 年榮獲微軟最有價(jià)值專家(MVP)獎(jiǎng)項(xiàng)。
第 1章 概念和工具 1
1.1 Windows操作系統(tǒng)的版本 1
1.1.1 Windows 10和未來的Windows版本 3
1.1.2 Windows 10和OneCore 3
1.2 基本概念和術(shù)語 3
1.2.1 Windows API 3
1.2.2 服務(wù)、函數(shù)和例程 6
1.2.3 進(jìn)程 7
1.2.4 線程 15
1.2.5 作業(yè) 17
1.2.6 虛擬內(nèi)存 18
1.2.7 內(nèi)核模式和用戶模式 20
1.2.8 虛擬機(jī)監(jiān)控程序 23
1.2.9 固件 25
1.2.10 終端服務(wù)和多會(huì)話 25
1.2.11 對(duì)象和句柄 26
1.2.12 安全性 26
1.2.13 注冊(cè)表 28
1.2.14 Unicode 28
1.3 深入了解Windows內(nèi)部原理 30
1.3.1 性能監(jiān)視器和資源監(jiān)視器 30
1.3.2 內(nèi)核調(diào)試 32
1.3.3 Windows軟件開發(fā)包 36
1.3.4 Sysinternals工具 37
1.4 小結(jié) 37
第 2章 系統(tǒng)架構(gòu) 38
2.1 需求和設(shè)計(jì)目標(biāo) 38
2.2 操作系統(tǒng)模型 39
2.3 架構(gòu)概述 39
2.3.1 可移植性 41
2.3.2 對(duì)稱多處理器 42
2.3.3 可伸縮性 45
2.3.4 客戶端和服務(wù)器版本之間的差異 45
2.3.5 已檢驗(yàn)版本 48
2.4 基于虛擬化的安全架構(gòu)概述 49
2.5 重要的系統(tǒng)組件 51
2.5.1 環(huán)境子系統(tǒng)和子系統(tǒng)DLL 52
2.5.2 其他子系統(tǒng) 57
2.5.3 執(zhí)行體 61
2.5.4 內(nèi)核 63
2.5.5 硬件抽象層 66
2.5.6 設(shè)備驅(qū)動(dòng)程序 69
2.5.7 系統(tǒng)進(jìn)程 74
2.6 小結(jié) 84
第3章 進(jìn)程和作業(yè) 85
3.1 創(chuàng)建進(jìn)程 85
3.1.1 CreateProcess*函數(shù)的參數(shù) 86
3.1.2 創(chuàng)建Windows“現(xiàn)代化”進(jìn)程 87
3.1.3 創(chuàng)建其他類型的進(jìn)程 87
3.2 進(jìn)程的內(nèi)部構(gòu)造 88
3.3 受保護(hù)進(jìn)程 95
3.3.1 受保護(hù)進(jìn)程輕型(PPL) 96
3.3.2 對(duì)第三方PPL的支持 99
3.4 最小進(jìn)程和Pico進(jìn)程 100
3.4.1 最小進(jìn)程 100
3.4.2 Pico進(jìn)程 101
3.5 Trustlet(安全進(jìn)程) 102
3.5.1 Trustlet的構(gòu)造 103
3.5.2 Trustlet策略元數(shù)據(jù) 103
3.5.3 Trustlet的屬性 104
3.5.4 系統(tǒng)內(nèi)置的Trustlet 104
3.5.5 Trustlet的標(biāo)識(shí) 105
3.5.6 隔離用戶模式服務(wù) 105
3.5.7 Trustlet可訪問的系統(tǒng)調(diào)用 106
3.6 CreateProcess的流程 107
3.6.1 第 1階段:轉(zhuǎn)換并驗(yàn)證參數(shù)和標(biāo)志 108
3.6.2 第 2階段:打開要執(zhí)行的映像 112
3.6.3 第3階段:創(chuàng)建Windows執(zhí)行體進(jìn)程對(duì)象 114
3.6.4 第4階段:創(chuàng)建初始線程及其棧和上下文 118
3.6.5 第5階段:執(zhí)行與Windows子系統(tǒng)有關(guān)的初始化工作 120
3.6.6 第6階段:初始線程的啟動(dòng)執(zhí)行 121
3.6.7 第7階段:在新進(jìn)程的上下文中執(zhí)行進(jìn)程初始化工作 122
3.7 進(jìn)程的終止 126
3.8 映像加載程序 127
3.8.1 進(jìn)程初始化的早期工作 129
3.8.2 DLL名稱解析和重定向 131
3.8.3 已加載模塊數(shù)據(jù)庫 135
3.8.4 導(dǎo)入解析 138
3.8.5 導(dǎo)入過程初始化的后處理 139
3.8.6 SwitchBack 140
3.8.7 API集 142
3.9 作業(yè) 144
3.9.1 作業(yè)的限制 145
3.9.2 使用作業(yè) 146
3.9.3 嵌套的作業(yè) 146
3.9.4 Windows容器(Server Silo) 150
3.10 小結(jié) 157
第4章 線程 158
4.1 創(chuàng)建線程 158
4.2 線程的內(nèi)部機(jī)理 159
4.2.1 數(shù)據(jù)結(jié)構(gòu) 159
4.2.2 線程的誕生 169
4.3 查看線程的活動(dòng) 170
4.4 線程的調(diào)度 175
4.4.1 Windows調(diào)度概述 175
4.4.2 優(yōu)先級(jí)級(jí)別 176
4.4.3 線程的狀態(tài) 181
4.4.4 調(diào)度程序數(shù)據(jù)庫 186
4.4.5 量程 188
4.4.6 優(yōu)先級(jí)提升 193
4.4.7 上下文切換 207
4.4.8 調(diào)度場景 208
4.4.9 空閑線程 211
4.4.10 線程的掛起 214
4.4.11 (深度)凍結(jié) 214
4.4.12 線程的選擇 216
4.4.13 多處理器系統(tǒng) 217
4.4.14 多處理器系統(tǒng)中線程的選擇 230
4.4.15 處理器的選擇 231
4.4.16 異質(zhì)調(diào)度(big.LITTLE) 233
4.5 基于組的調(diào)度 234
4.5.1 動(dòng)態(tài)公平共享調(diào)度 235
4.5.2 CPU速率限制 238
4.5.3 處理器的動(dòng)態(tài)添加和替換 241
4.6 工作者工廠(線程池) 242
4.7 小結(jié) 245
第5章 內(nèi)存管理 246
5.1 內(nèi)存管理器簡介 246
5.1.1 內(nèi)存管理器組件 247
5.1.2 大頁面和小頁面 247
5.1.3 查看內(nèi)存使用情況 249
5.1.4 內(nèi)部同步 252
5.2 內(nèi)存管理器提供的服務(wù) 252
5.2.1 頁面狀態(tài)和內(nèi)存的分配 253
5.2.2 提交用量和提交限制 256
5.2.3 鎖定到內(nèi)存 256
5.2.4 分配的粒度 257
5.2.5 共享內(nèi)存和映射文件 257
5.2.6 保護(hù)內(nèi)存 259
5.2.7 數(shù)據(jù)執(zhí)行保護(hù) 260
5.2.8 寫入時(shí)復(fù)制 263
5.2.9 地址窗口擴(kuò)展 264
5.3 內(nèi)核模式堆(系統(tǒng)內(nèi)存池) 265
5.3.1 池的大小 266
5.3.2 監(jiān)視內(nèi)存池的使用 267
5.3.3 旁視列表 270
5.4 堆管理器 271
5.4.1 進(jìn)程堆 272
5.4.2 堆的類型 273
5.4.3 NT堆 273
5.4.4 堆同步 273
5.4.5 段堆 275
5.4.6 堆的安全特性 279
5.4.7 堆的調(diào)試特性 280
5.4.8 頁堆 280
5.4.9 容錯(cuò)堆 283
5.5 虛擬地址空間布局 284
5.5.1 x86地址空間布局 285
5.5.2 x86系統(tǒng)地址空間布局 288
5.5.3 x86會(huì)話空間 288
5.5.4 系統(tǒng)頁表項(xiàng) 290
5.5.5 ARM地址空間布局 291
5.5.6 64位地址空間布局 291
5.5.7 x64虛擬尋址的局限 293
5.5.8 動(dòng)態(tài)系統(tǒng)虛擬地址空間管理 293
5.5.9 系統(tǒng)虛擬地址空間配額 298
5.5.10 用戶地址空間布局 298
5.6 地址轉(zhuǎn)換 303
5.6.1 x86虛擬地址轉(zhuǎn)換 303
5.6.2 地址轉(zhuǎn)換旁視緩沖區(qū) 308
5.6.3 x64虛擬地址轉(zhuǎn)換 311
5.6.4 ARM虛擬地址轉(zhuǎn)換 311
5.7 頁面錯(cuò)誤的處理 312
5.7.1 無效PTE 313
5.7.2 原型PTE 314
5.7.3 頁面換入I/O 316
5.7.4 沖突的頁面錯(cuò)誤 316
5.7.5 聚簇的頁面錯(cuò)誤 317
5.7.6 頁面文件 317
5.7.7 提交用量和系統(tǒng)提交限制 322
5.7.8 提交用量和頁面文件大小 325
5.8 !326
5.8.1 用戶棧 326
5.8.2 內(nèi)核!327
5.8.3 DPC棧 328
5.9 虛擬地址描述符 328
5.9.1 進(jìn)程的VAD 329
5.9.2 旋轉(zhuǎn)VAD 330
5.10 NUMA 331
5.11 節(jié)對(duì)象 331
5.12 工作集 338
5.12.1 按需換頁 338
5.12.2 邏輯預(yù)取器和ReadyBoot 339
5.12.3 放置策略 341
5.12.4 工作集管理 342
5.12.5 平衡集管理器和交換器 346
5.12.6 系統(tǒng)工作集 346
5.12.7 內(nèi)存通知事件 347
5.13 頁幀編號(hào)數(shù)據(jù)庫 349
5.13.1 頁面列表的轉(zhuǎn)換 351
5.13.2 頁面優(yōu)先級(jí) 357
5.13.3 已修改頁面寫出器和映射頁面寫出器 359
5.13.4 PFN的數(shù)據(jù)結(jié)構(gòu) 361
5.13.5 頁面文件的保留 364
5.14 物理內(nèi)存的限制 366
5.15 內(nèi)存壓縮 369
5.15.1 壓縮過程圖解 370
5.15.2 壓縮架構(gòu) 372
5.16 內(nèi)存分區(qū) 374
5.17 內(nèi)存聯(lián)合 376
5.17.1 搜索階段 378
5.17.2 分類階段 378
5.17.3 頁面聯(lián)合階段 379
5.17.4 從私有到共享PTE 380
5.17.5 聯(lián)合頁面的釋放 381
5.18 內(nèi)存飛地 384
5.18.1 編程接口 385
5.18.2 內(nèi)存飛地的初始化 385
5.18.3 飛地的構(gòu)造 386
5.18.4 將數(shù)據(jù)載入飛地 387
5.18.5 飛地的初始化 388
5.19 前瞻性內(nèi)存管理(SuperFetch) 388
5.19.1 組件 388
5.19.2 跟蹤和日志記錄 390
5.19.3 場景 390
5.19.4 頁面優(yōu)先級(jí)和重均衡 391
5.19.5 健壯性能 393
5.19.6 ReadyBoost 394
5.19.7 ReadyDrive 395
5.19.8 進(jìn)程反射 395
5.20 小結(jié) 397
第6章 I/O系統(tǒng) 398
6.1 I/O系統(tǒng)組件 398
6.1.1 I/O管理器 400
6.1.2 典型的I/O處理 400
6.2 中斷請(qǐng)求級(jí)別和延遲過程調(diào)用 402
6.2.1 中斷請(qǐng)求級(jí)別 402
6.2.2 延遲過程調(diào)用 404
6.3 設(shè)備驅(qū)動(dòng)程序 405
6.3.1 設(shè)備驅(qū)動(dòng)程序的類型 406
6.3.2 驅(qū)動(dòng)程序的結(jié)構(gòu) 410
6.3.3 驅(qū)動(dòng)程序?qū)ο蠛驮O(shè)備對(duì)象 412
6.3.4 打開設(shè)備 417
6.4 I/O的處理 421
6.4.1 I/O的類型 421
6.4.2 I/O請(qǐng)求包 423
6.4.3 針對(duì)單層硬件驅(qū)動(dòng)程序的I/O請(qǐng)求 433
6.4.4 針對(duì)分層驅(qū)動(dòng)程序的I/O請(qǐng)求 440
6.4.5 線程無關(guān)I/O 443
6.4.6 I/O的取消 443
6.4.7 I/O完成端口 447
6.4.8 I/O優(yōu)先級(jí)處理 451
6.4.9 容器通知 455
6.5 驅(qū)動(dòng)程序驗(yàn)證程序 456
6.5.1 與I/O有關(guān)的驗(yàn)證選項(xiàng) 458
6.5.2 與內(nèi)存有關(guān)的驗(yàn)證選項(xiàng) 458
6.6 即插即用管理器 462
6.6.1 即插即用的支持級(jí)別 462
6.6.2 設(shè)備的枚舉 463
6.6.3 設(shè)備!465
6.6.4 驅(qū)動(dòng)程序?qū)床寮从玫闹С帧?70
6.6.5 即插即用驅(qū)動(dòng)程序的安裝 472
6.7 常規(guī)驅(qū)動(dòng)程序的加載和安裝 475
6.7.1 驅(qū)動(dòng)程序的加載 475
6.7.2 驅(qū)動(dòng)程序的安裝 477
6.8 Windows驅(qū)動(dòng)程序基礎(chǔ) 477
6.8.1 內(nèi)核模式驅(qū)動(dòng)程序框架 478
6.8.2 用戶模式驅(qū)動(dòng)程序框架 485
6.9 電源管理器 488
6.9.1 連接待機(jī)和新型待機(jī) 491
6.9.2 電源管理器操作 491
6.9.3 驅(qū)動(dòng)程序的電源操作 492
6.9.4 驅(qū)動(dòng)程序和應(yīng)用程序?qū)υO(shè)備電源的控制 495
6.9.5 電源管理框架 495
6.9.6 電源可用性請(qǐng)求 497
6.10 小結(jié) 498
第7章 安全性 500
7.1 安全評(píng)級(jí) 500
7.1.1 可信計(jì)算機(jī)系統(tǒng)評(píng)估標(biāo)準(zhǔn) 500
7.1.2 通用標(biāo)準(zhǔn) 501
7.2 安全系統(tǒng)組件 502
7.3 基于虛擬化的安全性 504
7.3.1 Credential Guard 505
7.3.2 Device Guard 510
7.4 保護(hù)對(duì)象 512
7.4.1 訪問檢查 513
7.4.2 安全標(biāo)識(shí)符 516
7.4.3 虛擬服務(wù)賬戶 533
7.4.4 安全描述符和訪問控制 537
7.4.5 動(dòng)態(tài)訪問控制 550
7.5 AuthZ API 551
7.6 賬戶權(quán)限和特權(quán) 552
7.6.1 賬戶權(quán)限 553
7.6.2 特權(quán) 554
7.6.3 超級(jí)特權(quán) 558
7.7 進(jìn)程和線程的訪問令牌 559
7.8 安全審核 559
7.8.1 審核對(duì)象訪問 560
7.8.2 全局審核策略 563
7.8.3 高級(jí)審核策略設(shè)置 564
7.9 AppContainer 565
7.9.1 UWP應(yīng)用概述 566
7.9.2 AppContainer 567
7.10 登錄 587
7.10.1 Winlogon的初始化 588
7.10.2 用戶登錄的步驟 590
7.10.3 可保證的身份驗(yàn)證 594
7.10.4 Windows Biometric Framework 595
7.10.5 Windows Hello 597
7.11 用戶賬戶控制和虛擬化 598
7.11.1 文件系統(tǒng)和注冊(cè)表虛擬化 598
7.11.2 權(quán)限提升 603
7.12 攻擊緩解 608
7.12.1 進(jìn)程緩解策略 608
7.12.2 控制流完整性 612
7.12.3 安全聲明 622
7.13 應(yīng)用程序標(biāo)識(shí) 626
7.14 AppLocker 626
7.15 軟件限制策略 630
7.16 內(nèi)核補(bǔ)丁保護(hù) 632
7.17 PatchGuard 633
7.18 HyperGuard 635
7.19 小結(jié) 636