第一章 概念和工具 1
1.1 基本概念和术语 1
1.1.1 Win32 API 1
1.1.2 服务、函数和例程 3
1.1.3 进程和线程 3
1.1.4 虚拟内存 5
1.1.5 核心态和用户态 7
1.1.6 对象和句柄 10
1.1.7 安全性 10
1.1.8 注册表 12
1.1.9 网络 13
1.1.10 Unicode 14
1.2 深入 Windows NT内部的工具 14
1.2.1 Windows NT资源工具包 16
1.2.2 Platform SDK和Windows NT DDK 16
1.2.3 关键的Windows NT基本工具 17
1.2.4 纯运行版本和带调试信息版本 21
1.2.5 查看内部数据结构和变量 21
结论 22
第二章 系统体系结构 23
2.1 需求与设计目标 23
2.2 操作系统模型 24
2.3 体系结构综述 27
2.3.1 可移植性 29
2.3.2 对称多处理 29
2.3.3 Windows NT Workstation和Windows NT Server 33
2.4 关键系统组件 36
2.4.1 环境子系统和子系统动态链接库 37
2.4.2 NTDLL.DLL 48
2.4.3 执行体 49
2.4.4 内核 50
2.4.5 硬件抽象层(HAL) 52
2.4.6 设备驱动程序 53
2.4.7 窥视非文档化接口 55
2.4.8 系统进程 58
结论 65
第三章 系统机制 66
3.1 陷阱调度 66
3.1.1 中断调度 67
3.1.2 异常调度 77
3.1.3 系统服务调度 80
3.2 对象管理器 83
3.2.1 执行体对象 85
3.2.2 对象结构 86
3.3 同步 101
3.3.1 内核同步 103
3.3.2 执行体同步 104
3.4 Windows NT全局标志 111
3.5 本地过程调用(LPC) 113
结论 116
第四章 进程和线程 117
4.1 进程的本质 117
4.1.1 数据结构 117
4.1.2 系统变量 123
4.1.3 性能计数器 123
4.1.4 相关函数 124
4.1.5 相关工具 124
4.2 CreateProcess流程 129
4.2.1 阶段1:打开要执行的映像 131
4.2.2 阶段2:创建Windows NT执行体进程对象 134
4.2.3 阶段3:创建初始线程及其堆栈和描述表 138
4.2.4 阶段4:把创建新进程的情况通知Win32子系统 139
4.2.5 阶段5:开始初始线程的执行 140
4.2.6 阶段6:完成在新进程描述表中的进程初始化 140
4.3 线程的本质 141
4.3.1 数据结构 141
4.3.2 系统变量 145
4.3.3 性能计数器 145
4.3.4 相关函数 146
4.3.5 相关工具 146
4.4 CreateThread流程 148
4.5 线程调度 151
4.5.1 Windows NT调度概述 152
4.5.2 优先级 155
4.5.3 Win32调 度API 156
4.5.4 相关工具 157
4.5.5 实时优先级 159
4.5.6 中断级与优先级对比 159
4.5.7 线程状态 159
4.5.8 时间片 161
4.5.9 调度数据结构 163
4.5.10 系统变量 164
4.5.11 调度方案 164
4.5.12 描述表切换 167
4.5.13 空闲线程 168
4.5.14 调整线程调度 169
4.5.15 对称多处理系统上的线程调度 175
结论 178
第五章 内存管理 179
5.1 内存管理器提供的服务 179
5.1.1 保留和提交虚拟内存 180
5.1.2 共享内存和映射文件 181
5.1.3 保护内存 183
5.1.4 写时复制 185
5.1.5 堆函数 187
5.1.6 系统内存交换区 188
5.2 深入内存管理器 192
5.2.1 组件 192
5.2.2 内部同步 193
5.2.3 调整内存管理器 193
5.2.4 检查内存的使用 195
5.3 地址空间布局 197
5.3.1 用户地址空间布局 199
5.3.2 系统地址空间布局 203
5.4 地址转换 207
5.4.1 转换虚拟地址 208
5.4.2 页目录 210
5.4.3 进程和系统页表 211
5.4.4 页表项 213
5.4.5 页面内的字节 216
5.4.6 转换后备缓冲区 216
5.5 页错误处理 219
5.5.1 无效的PTE 220
5.5.2 原型PTE 221
5.5.3 入页I/O 223
5.5.4 冲突页错误 224
5.5.5 页面文件 224
5.6 虚拟地址描述符 226
5.7 工作集 228
5.7.1 页面调度策略 228
5.7.2 进程工作集 230
5.7.3 平衡集管理器和交换程序 232
5.7.4 系统工作集 233
5.8 页帧数据库 235
5.8.1 页面列表动态 239
5.8.2 更改页面写入程序 242
5.8.3 PFN数据结构 243
5.9 区域对象 246
结论 251
第六章 安全性 252
6.1 安全性系统组件 253
6.2 保护对象 256
6.2.1 安全描述体和访问控制 256
6.2.2 访问令牌与模仿 260
6.3 安全审核 264
6.4 登录 265
6.4.1 WinLogon初始化 266
6.4.2 用户登录步骤 267
结论 268
第七章 I/O系统 269
7.1 I/O系统结构和模型 269
7.1.1 I/O管理器 271
7.1.2 I/O函数 272
7.2 设备驱动程序 274
7.2.1 驱动程序结构 279
7.2.2 同步 281
7.3 数据结构 282
7.3.1 文件对象 282
7.3.2 驱动程序对象和设备对象 285
7.3.3 I/O请求包 288
7.4 I/O处理 290
7.4.1 对单层驱动程序的I/O请求 290
7.4.2 对分层驱动程序的I/O请求 295
结论 300
第八章 高速缓存管理器 301
8.1 Windows NT高速缓存管理器的主要特性 301
8.1.1 单个、集中的系统高速缓存 302
8.1.2 内存管理器 302
8.1.3 高速缓存一致性 302
8.1.4 虚拟块高速缓存 304
8.1.5 基于流的高速缓存 304
8.1.6 可恢复文件系统支持 305
8.2 高速缓存结构 306
8.3 高速缓存的大小 308
8.3.1 高速缓存的虚拟大小 308
8.3.2 高速缓存的物理大小 308
8.4 高速缓存数据结构 310
8.4.1 系统范围的高速缓存数据结构 310
8.4.2 每个文件的高速缓存数据结构 311
8.5 高速缓存操作 314
8.5.1 回写高速缓存和延迟书写 314
8.5.2 智能预读 317
8.5.3 系统线程 319
8.5.4 快速I/O 319
8.6 高速缓存支持例程 321
8.6.1 复制到高速缓存和从高速缓存复制 322
8.6.2 使用映射和Pinning接口高速缓存 323
8.6.3 使用直接存储器存取接口高速缓存 325
8.6.4 写入调速 326
结论 326
第九章 Windows NT文件系统(NTFS) 327
9.1 NTFS的设计目标和特性 327
9.1.1 高端文件系统需求 327
9.1.2 NTFS的其他特性 330
9.2 NTFS的内部结构 333
9.3 NTFS在磁盘上的结构 336
9.3.1 卷 336
9.3.2 簇 336
9.3.3 主控文件表(MFT) 337
9.3.4 文件引用号 340
9.3.5 文件记录 340
9.3.6 文件名 342
9.3.7 常驻属性和非常驻属性 344
9.3.8 文件名索引 348
9.3.9 数据压缩 349
9.4 可恢复支持 354
9.4.1 文件系统设计的发展 354
9.4.2 记录 357
9.4.3 恢复 362
9.5 容错支持 366
9.5.1 卷管理特性 366
9.5.2 容错卷 368
9.5.3 NTFS坏簇恢复 371
结论 375
第十章 Windows NT5.0和64位Windows NT 376
10.1 Windows NT5.0中的新特性概述 376
10.1.1 活动目录 377
10.1.2 分布式安全性扩展 378
10.1.3 加密 379
10.1.4 安全配置编辑程序 381
10.1.5 分布式文件服务 381
10.1.6 NTFS扩展 382
10.1.7 Microsoft管理控制台 382
10.1.8 Microsoft软件安装程序 383
10.1.9 存储管理 384
10.1.10 IntelliMirror 384
10.1.11 应用程序的开发 385
10.1.12 作业对象 385
10.1.13 即插即用和WDM 387
10.1.14 Alpha上的大容量内存 388
10.1.15 用户改进 389
10.2 系统扩展 391
10.2.1 簇 392
10.2.2 Microsoft终端服务器 392
10.3 即插即用和电源管理 394
10.3.1 即插即用的发展 394
10.3.2 在Windows NT 5.0中的实现 395
10.3.3 驱动程序的更改 396
10.3.4 Windows NT 5.0即插即用结构 396
10.4 64位Windows NT 400
结论 401
词汇表 402