第8章 I/O係統 1
8.1 I/O係統組件 1
I/O管理器 3
典型的I/O處理過程 4
8.2 設備驅動程序 5
設備驅動程序的類型 5
WDM驅動程序 6
分層的驅動程序 7
實驗:查看已加載的驅動程序列錶 9
驅動程序的結構 11
驅動程序對象和設備對象 13
實驗:看一看設備對象 15
實驗:顯示驅動程序和設備對象 17
打開設備 18
實驗:查看設備句柄 21
實驗:查看Windows設備名稱之間的映射 23
8.3 I/O處理 24
I/O類型 24
同步I/O和異步I/O 24
快速I/O 25
實驗:查看一個驅動程序登記的快速I/O例程 25
映射文件I/O和文件緩存 26
分散/聚集I/O 27
I/O請求包 27
IRP棧單元 28
實驗:查看驅動程序的分發例程 29
實驗:查看一個綫程的未完成IRP 29
IRP緩衝區管理 30
針對單層驅動程序的I/O請求 32
為一個中斷提供服務 33
完成一個I/O請求 34
同步 36
針對分層的驅動程序的I/O請求 38
實驗:查看一個設備棧 39
實驗:查看IRP 40
綫程無關I/O 45
I/O取消 45
用戶發起的I/O取消 46
綫程終止時的I/O取消 47
實驗:調試一個無法被殺死的進程 48
I/O完成端口 49
IoCompletion對象 50
使用完成端口 50
I/O完成端口操作 52
I/O優先級支持 54
I/O優先級 54
優先化策略 55
I/O優先級反轉的避免(I/O優先級繼承) 57
I/O優先級提升和撞升 57
實驗:“非常低”和“正常”I/O吞吐量的對比 58
實驗:I/O優先級提升/撞升的性能分析 59
帶寬預留(計劃的文件I/O) 60
容器通知 60
驅動程序檢驗器(Driver Verifier) 61
8.4 內核模式驅動程序框架(KMDF) 63
KMDF驅動程序的結構和操作 64
實驗:顯示KMDF驅動程序 65
KMDF數據模型 66
KMDF的I/O模型 69
8.5 用戶模式驅動程序框架(UMDF) 72
8.6 即插即用(PnP)管理器 76
即插即用支持的級彆 77
驅動程序對於即插即用的支持 77
驅動程序加載、初始化和安裝 79
Start值 80
設備列舉 81
實驗:將設備樹轉儲齣來 84
設備棧 85
設備棧的驅動程序加載 86
實驗:在設備管理器中查看詳細的devnode信息 88
驅動程序安裝 90
實驗:檢查一個驅動程序的INF文件 92
實驗:查看目錄(catalog)文件 93
8.7 電源管理器 94
電源管理器的操作 96
驅動程序的電源操作 97
實驗:查看一個驅動程序的電源映射關係 97
實驗:查看係統的電源能力和策略 98
驅動程序和應用程序對於設備電源的控製 100
電源可用性請求 100
實驗:在調試器中查看一個電源可用性請求 101
實驗:利用Powercfg查看電源可用性請求 103
處理器電源管理(PPM) 103
核心停運的策略 104
利用率函數 105
實驗:查看利用率和頻率的信息 106
實驗:查看利用率和頻率的曆史 107
算法覆蓋 108
增加/減少動作 108
各種閾值和策略的設置 109
實驗:查看當前的核心停運策略 111
“性能檢查”算法 112
實驗:查看當前的PPM檢查信息 116
8.8 本章總結 118
第9章 存儲管理 119
9.1 有關存儲的術語 119
9.2 磁盤設備 120
鏇轉磁盤 120
磁盤的扇區格式 120
固態硬盤 122
NAND型閃存 122
文件的刪除和irim命令 124
9.3 磁盤驅動程序 125
Winload 125
磁盤類、端口和小端口驅動程序 126
iSCSI驅動程序 127
多路徑I/O(MPIO)驅動程序 128
實驗:觀察物理磁盤I/O 130
磁盤設備對象 130
分區管理器 131
9.4 捲的管理 132
基本磁盤 133
MBR風格的分區 133
GPT(GUID分區錶)分區方案 133
基本磁盤捲管理器 134
動態磁盤 135
LDM數據庫 135
實驗:使用LDMDump來查看LDM數據庫 137
LDM和GPT或MBR風格的分區方案 139
動態磁盤的捲管理器 140
多分區捲的管理 140
跨距捲 141
條帶捲 142
實驗:觀察鏡像捲的I/O操作 143
RAID-5捲 145
捲名字空間 145
掛載管理器 146
掛載點 147
捲的掛載 148
實驗:查看VPB 149
捲的I/O操作 152
虛擬磁盤服務 153
9.5 虛擬硬盤(VHD文件)支持 155
附載VHD的操作 156
嵌套的文件係統 156
9.6 BitLocker驅動器加密 157
加密密鑰 159
可信平颱模塊(TPM) 161
BitLocker引導過程 163
BitLocker密鑰的恢復 165
全捲加密驅動程序 166
BitLocker的管理 167
BitLocker To Go 168
9.7 捲影像(shadow)拷貝服務 170
影像拷貝 170
“剋隆”影像拷貝 170
“寫時復製”影像拷貝 170
VSS的架構 170
VSS的操作 171
影像拷貝提供者 172
實驗:查看Microsoft影像拷貝提供者的過濾型設備對象 173
Windows中的用途 174
備份 174
實驗:查看影像捲的設備對象 174
“之前的版本”和係統還原 175
實驗:導航到“之前的版本” 176
實驗:映射捲影像設備對象 177
9.8 本章總結 178
第10章 內存管理 179
10.1 內存管理器簡介 179
內存管理器組件 180
內部同步 181
檢查內存的使用情況 182
實驗:查看係統內存信息 182
10.2 內存管理器提供的服務 184
大頁麵和小頁麵 185
保留頁麵和提交頁麵 187
實驗:保留的頁麵對比提交的頁麵 188
提交限額 190
鎖住內存 190
分配粒度 191
共享內存和映射文件 192
實驗:查看內存映射文件 193
保護內存 194
“不可執行”頁麵保護 196
實驗:查看進程上的DEP保護 199
軟件的數據執行保護 200
寫時復製 201
地址窗口擴展 203
10.3 內核模式堆(係統內存池) 204
內存池的大小 205
實驗:確定最大的池大小值 206
監視內存池的使用 208
實驗:診斷內存池泄漏 210
快查錶(Look-Aside List) 211
實驗:查看係統的快查錶 212
10.4 堆管理器 212
堆的類型 213
堆管理器結構 214
堆同步 215
低碎片堆 215
堆的安全特性 216
堆的調試特性 217
pageheap 218
容錯堆 218
10.5 虛擬地址空間的布局結構 219
x86地址空間的布局結構 221
實驗:檢查一個應用程序能否感知大地址空間 222
x86係統地址空間的布局結構 223
x86會話空間 224
實驗:查看會話 224
實驗:查看會話空間的使用情況 225
係統頁錶項(PTE,Page Table Entry) 226
實驗:查看會話空間的使用情況 226
64位地址空間布局結構 227
x64虛擬尋址的限製 230
Windows x64的16TB限製 231
動態的係統虛擬地址空間管理 233
實驗:查詢係統虛擬地址的用量 234
實驗:設置係統虛擬地址的限製值 235
係統的虛擬地址空間配額 236
用戶地址空間的布局結構 237
實驗:對用戶虛擬地址空間進行分析 238
映像隨機化 239
棧的隨機化 240
堆的隨機化 240
內核地址空間中的ASLR 240
對安全性緩和措施的控製 240
實驗:查看進程上的ASLR保護 241
10.6 地址轉譯 241
x86虛擬地址轉譯 242
頁目錄 245
實驗:檢查頁目錄和PDE 245
頁錶和頁錶項 246
頁錶項中硬件和軟件的“寫”位 247
頁麵內的字節 248
地址轉譯快查緩衝區 248
物理地址擴展(PAE) 249
實驗:轉譯地址 251
x64虛擬地址轉譯 253
IA64虛擬地址轉譯 254
10.7 頁麵錯誤處理 255
無效PTE 256
原型PTE 258
頁麵換入I/O 259
衝突的頁麵錯誤 260
聚簇的頁麵錯誤 260
頁麵文件 261
實驗:查看係統頁麵文件 262
提交用量和係統提交限額 263
提交用量和頁麵文件的大小 266
實驗:利用任務管理器來查看頁麵文件使用量 266
10.8 棧 268
用戶棧 268
實驗:創建最大數量的綫程 268
內核棧 269
實驗:觀察內核棧的使用量 269
DPC棧 270
10.9 虛擬地址描述符 270
進程的VAD 271
實驗:查看虛擬地址描述符 272
鏇轉VAD 272
10.10 NUMA 273
10.11 內存區對象 274
實驗:查看內存區對象 275
實驗:查看控製區域 277
10.12 驅動程序檢驗器 280
10.13 頁麵幀編號數據庫 284
實驗:查看PFN數據庫 287
頁麵列錶的動態變化 288
實驗:空閑列錶和零頁麵列錶 289
實驗:已修改列錶和備用列錶 291
頁麵優先級 296
實驗:觀察區分優先級的備用列錶 298
已修改頁麵寫齣器 299
PFN數據結構 301
實驗:查看PFN項 304
10.14 物理內存的限製 305
Windows客戶版本的限製 306
32位客戶的有效內存限製 307
10.15 工作集 309
按需換頁 309
邏輯預取器 310
實驗:窺探預取文件內部 312
實驗:觀察預取文件的讀和寫 312
放置策略 313
工作集管理 314
實驗:查看進程工作集大小 316
實驗:工作集與虛擬大小 316
實驗:在調試器中查看工作集列錶 317
平衡集管理器和交換器 318
係統工作集 319
內存通知事件 320
實驗:查看內存資源通知事件 321
10.16 主動式內存管理(Superfetch) 322
各個組件 322
跟蹤過程和日誌記錄 324
場景 325
頁麵優先級和重平衡 326
魯棒性能 328
RAM優化軟件 329
ReadyBoost 330
ReadyDrive 331
統一緩存 332
進程反射 334
實驗:利用Preflect來觀察進程反射的行為 336
10.17 本章總結 337
第11章 緩存管理器 338
11.1 緩存管理器的關鍵特性 338
單個中心化的係統緩存 339
內存管理器 339
緩存一緻性 339
虛擬塊緩存 341
流式緩存機製 341
對可恢復文件係統的支持 341
11.2 緩存的虛擬內存管理 342
11.3 緩存的大小 344
緩存的虛擬大小 344
緩存的工作集大小 344
實驗:查看係統緩存的工作集 345
緩存的物理大小 345
11.4 緩存的數據結構 347
係統範圍的緩存數據結構 347
實驗:查看係統緩存的工作集 349
針對每個文件的緩存數據結構 350
實驗:查看共享的和私有的緩存錶 353
11.5 文件係統接口 355
從緩存中來迴拷貝數據 356
通過映射和鎖定接口進行緩存 356
通過直接內存訪問接口進行緩存 357
11.6 快速I/O 357
11.7 預讀(Read Ahead)和滯後寫(Write Behind) 359
智能預讀 359
迴寫緩存(Write-Back Caching)和延遲寫(Lazy Writing) 361
實驗:觀察緩存管理器的活動情況 362
禁止一個文件的延遲寫齣行為 367
強迫緩存被直寫(write-through)到磁盤上 367
刷新映射文件 367
實驗:觀察緩存的刷新 368
寫節流(Write Throttling) 369
實驗:查看寫節流參數 370
係統綫程 370
11.8 本章總結 371
第12章 文件係統 372
12.1 Windows文件係統格式 373
CDFS 373
UDF 374
FAT12、FAT16和FAT32 374
exFAT 377
NTFS 377
12.2 文件係統驅動程序總體結構 378
本地FSD 379
遠程FSD 380
鎖定 381
實驗:查看已注冊文件係統的列錶 383
文件係統操作 387
顯式文件I/O 388
內存管理器的修改頁麵寫齣器和映射頁麵寫齣器 392
緩存管理器的延遲寫齣器(Lazy Writer) 392
緩存管理器的預讀綫程 392
內存管理器的頁麵錯誤處理器 393
文件係統過濾型驅動程序 393
進程監視器 393
實驗:查看進程監視器的過濾型驅動程序 394
12.3 診斷文件係統的問題 395
進程監視器的基本和高級模式 395
實驗:在一個空閑係統上查看文件係統的活動 395
進程監視器診斷技巧 396
12.4 公用日誌文件係統 397
列集操作 397
日誌的類型 398
日誌的布局結構 400
日誌序列號 401
日誌塊 401
所有者頁麵 402
虛擬LSN到物理LSN的轉譯 403
管理策略 404
12.5 NTFS設計目標和特性 404
高端(High-End)文件係統的需求 404
可恢復性 405
安全性 405
數據冗餘和容錯能力 405
NTFS的高級特性 406
多數據流 406
實驗:查看數據流 408
基於Unicode的名稱 408
通用的索引設施 409
動態的壞簇重新映射 409
硬鏈接(link)和交接(junction) 409
實驗:創建一個硬鏈接 410
符號(軟)鏈接和交接(junction) 410
實驗:創建一個符號鏈接 412
壓縮文件和稀疏文件 412
變化日誌 413
針對每個用戶的捲配額 413
鏈接跟蹤 414
加密 415
POSIX支持 416
碎片整理 416
動態分區 417
12.6 NTFS文件係統驅動程序 419
12.7 NTFS在磁盤上的結構 421
捲(volume) 421
簇(cluster) 422
主文件錶(MFT) 423
實驗:查看NTFS信息 425
文件記錄號 426
文件記錄 426
文件名 429
隧道傳輸 431
駐留的和非駐留的屬性 432
數據壓縮和稀疏文件 435
壓縮稀疏數據 435
壓縮非稀疏數據 437
稀疏文件 439
變化日誌文件 439
實驗:讀取變化日誌 441
索引 442
對象ID 444
配額跟蹤 444
統一的安全性 445
重解析點 447
事務支持 447
隔離性 448
實驗:理解和管理事務 449
事務型API 450
資源管理器 451
實驗:查詢資源管理器的信息 452
磁盤上的實現 453
日誌的實現 454
恢復的實現 455
12.8 NTFS的恢復支持 455
設計 456
元數據日誌記錄 457
日誌文件服務(LFS) 457
日誌記錄類型 459
恢復 461
分析掃描(Analysis Pass) 462
重做掃描(Redo Pass) 463
撤銷掃描(Undo Pass) 463
NTFS的壞簇恢復 465
自我修復 468
12.9 加密文件係統(EFS)安全性 469
第一次加密一個文件 472
加密文件數據 473
解密過程 474
加密文件的備份 474
實驗:查看EFS信息 475
加密文件的復製 475
12.10 本章總結 476
第13章 啓動和停機 477
13.1 引導過程 477
BIOS引導準備 477
BIOS引導扇區和Bootmgr 481
UEFI引導過程 495
從iSCSI引導 496
初始化內核和執行體子係統 497
實驗:加載器參數塊 497
Smss、Csrss和Wininit 504
未完成的文件重命名操作 507
ReadyBoot 509
自動啓動的映像文件 510
實驗:Autoruns 511
13.2 引導和啓動問題的故障檢查 511
最後已知的好配置 512
安全模式 512
安全模式下的驅動程序加載 513
能感知安全模式的用戶程序 514
安全模式下的引導日誌 515
Windows恢復環境(WinRE) 516
引導狀態文件 519
解決常見的引導問題 520
MBR損壞 520
引導扇區損壞 520
BCD的錯誤配置 520
係統文件損壞 521
Windows資源保護 522
System儲巢損壞 523
啓動屏幕之後的崩潰或者掛起 523
13.3 停機 525
實驗:驗證HungAppTimeout值 526
13.4 本章總結 528
第14章 崩潰轉儲分析 529
14.1 Windows為什麼會崩潰 529
14.2 藍屏 530
Windows崩潰的原因 531
14.3 診斷崩潰問題 533
14.4 崩潰轉儲文件 535
實驗:查看轉儲文件的信息 539
崩潰轉儲的生成 540
14.5 Windows錯誤報告 542
14.6 在綫崩潰分析 543
14.7 基本的崩潰轉儲分析 545
Notmyfault 545
基本的崩潰轉儲分析 546
詳細的分析 547
14.8 使用崩潰診斷工具 549
緩衝區溢齣、內存破壞和特殊內存池 550
實驗:通過驅動程序檢驗器啓用特殊內存池 552
代碼改寫和係統代碼寫保護 553
14.9 高級的崩潰轉儲分析 554
棧破壞 555
掛起的或無響應的係統 557
實驗:利用LiveKd來生成Hyper-V客戶的轉儲 559
當沒有崩潰轉儲時 561
實驗:附載一個內核調試器 562
14.10 對常見停止代碼的分析 564
0xD1 - DRIVER_IRQL_NOT_LESS_OR_EQUAL 564
0x8E - KERNEL_MODE_EXCEPTION_NOT_HANDLED 566
0x7F - UNEXPECTED_KERNEL_MODE_TRAP 567
0xC5 - DRIVER_CORRUPTED_EXPOOL 569
硬件故障 571
實驗:藍屏屏幕保護程序 572
· · · · · · (
收起)