深入解析Windows操作系统 第7版 卷1
第 1章 概念和工具 1
1.1 Windows操作系统的版本 1
1.1.1 Windows 10和未来的Windows版本 3
1.1.2 Windows 10和OneCore 3
1.2 基本概念和术语 3
1.2.1 Windows API 3
1.2.2 服务、函数和例程 6
1.2.3 进程 7
1.2.4 线程 15
1.2.5 作业 17
查看完整
1.1 Windows操作系统的版本 1
1.1.1 Windows 10和未来的Windows版本 3
1.1.2 Windows 10和OneCore 3
1.2 基本概念和术语 3
1.2.1 Windows API 3
1.2.2 服务、函数和例程 6
1.2.3 进程 7
1.2.4 线程 15
1.2.5 作业 17
查看完整
帕维尔·约西沃维奇(Pavel Yosifovich)是一位精通微软技术和工具的开发者、讲师,还是微软 MVP 以及在线教育网站 Pluralsight 的签约作者。 亚历克斯·伊奥尼斯库(Alex Ionescu) 是CrowdStrike 的 EDR 战略副总裁,也是底层系统软件、操作系统研究与内核开发、 安全培训和逆向工程领域的专家。他曾在世界各地讲授有关 Windows 内部机理的课程,并活跃于安全研究社区,多次参加会议讲座和 bug 赏金计划。 马克· E.鲁辛诺维奇( Mark E.Russinovich)是 Microsoft Azure( 微软的全球化、企业级云平台)的首席技术官。他是分布式系统和操作系统领域的专家,曾是 Winternals Software 公司的联合创始人,并在该公司被微软收购后加入了微软。他还是 Sysinternals 工具的发明者和Sysinternals 网站的创立者。 大卫· A . 所罗门(David…
查看完整
查看完整
本书基于Windows 10和Windows Server 2016编写,深入解析Windows操作系统的系统架构、进程、线程、内存管理等知识,旨在帮助读者了解Windows 10和Windows Server 2016操作系统内部工作原理,使之在针对Windows平台开发应用程序时,可以更好地理解不同设计机制间的关系。
本书先介绍Windows的基本概念和工具以及Windows的架构和主要组件,然后详细介绍进程和作业、内存管理、I/O系统等内容,*后介绍Windows内置的安全机制以及用于阻止滥用的各种缓解措施。
本书辅以大量实验,并给出了具体步骤,可供读者自行尝试,让他们通过内核调试器、Sysinternals工具和专为本书内容开发的其他工具一窥Windows的工作原理,进而能够将这些知识应用于改进应用程序设计、调试以及系统性能和支持。
查看完整
本书先介绍Windows的基本概念和工具以及Windows的架构和主要组件,然后详细介绍进程和作业、内存管理、I/O系统等内容,*后介绍Windows内置的安全机制以及用于阻止滥用的各种缓解措施。
本书辅以大量实验,并给出了具体步骤,可供读者自行尝试,让他们通过内核调试器、Sysinternals工具和专为本书内容开发的其他工具一窥Windows的工作原理,进而能够将这些知识应用于改进应用程序设计、调试以及系统性能和支持。
查看完整
第 1章 概念和工具 1
1.1 Windows操作系统的版本 1
1.1.1 Windows 10和未来的Windows版本 3
1.1.2 Windows 10和OneCore 3
1.2 基本概念和术语 3
1.2.1 Windows API 3
1.2.2 服务、函数和例程 6
1.2.3 进程 7
1.2.4 线程 15
1.2.5 作业 17
1.2.6 虚拟内存 18
1.2.7 内核模式和用户模式 20
1.2.8 虚拟机监控程序 23
1.2.9 固件 25
1.2.10 终端服务和多会话 25
1.2.11 对象和句柄 26
1.2.12 安全性 26
1.2.13 注册表 28
1.2.14 Unicode 28
1.3 深入了解Windows内部原理 30
1.3.1 性能监视器和资源监视器 30
1.3.2 内核调试 32
1.3.3 Windows软件开发包 36
1.3.4 Sysinternals工具 37
1.4 小结 37
第 2章 系统架构 38
2.1 需求和设计目标 38
2.2 操作系统模型 39
2.3 架构概述 39
2.3.1 可移植性 41
2.3.2 对称多处理器 42
2.3.3 可伸缩性 45
2.3.4 客户端和服务器版本之间的差异 45
2.3.5 已检验版本 48
2.4 基于虚拟化的安全架构概述 49
2.5 重要的系统组件 51
2.5.1 环境子系统和子系统DLL 52
2.5.2 其他子系统 57
2.5.3 执行体 61
2.5.4 内核 63
2.5.5 硬件抽象层 66
2.5.6 设备驱动程序 69
2.5.7 系统进程 74
2.6 小结 84
第3章 进程和作业 85
3.1 创建进程 85
3.1.1 CreateProcess*函数的参数 86
3.1.2 创建Windows“现代化”进程 87
3.1.3 创建其他类型的进程 87
3.2 进程的内部构造 88
3.3 受保护进程 95
3.3.1 受保护进程轻型(PPL) 96
3.3.2 对第三方PPL的支持 99
3.4 小进程和Pico进程 100
3.4.1 小进程 100
3.4.2 Pico进程 101
3.5 Trustlet(安全进程) 102
3.5.1 Trustlet的构造 103
3.5.2 Trustlet策略元数据 103
3.5.3 Trustlet的属性 104
3.5.4 系统内置的Trustlet 104
3.5.5 Trustlet的标识 105
3.5.6 隔离用户模式服务 105
3.5.7 Trustlet可访问的系统调用 106
3.6 CreateProcess的流程 107
3.6.1 第 1阶段:转换并验证参数和标志 108
3.6.2 第 2阶段:打开要执行的映像 112
3.6.3 第3阶段:创建Windows执行体进程对象 114
3.6.4 第4阶段:创建初始线程及其栈和上下文 118
3.6.5 第5阶段:执行与Windows子系统有关的初始化工作 120
3.6.6 第6阶段:初始线程的启动执行 121
3.6.7 第7阶段:在新进程的上下文中执行进程初始化工作 122
3.7 进程的终止 126
3.8 映像加载程序 127
3.8.1 进程初始化的早期工作 129
3.8.2 DLL名称解析和重定向 131
3.8.3 已加载模块数据库 135
3.8.4 导入解析 138
3.8.5 导入过程初始化的后处理 139
3.8.6 SwitchBack 140
3.8.7 API集 142
3.9 作业 144
3.9.1 作业的限制 145
3.9.2 使用作业 146
3.9.3 嵌套的作业 146
3.9.4 Windows容器(Server Silo) 150
3.10 小结 157
第4章 线程 158
4.1 创建线程 158
4.2 线程的内部机理 159
4.2.1 数据结构 159
4.2.2 线程的诞生 169
4.3 查看线程的活动 170
4.4 线程的调度 175
4.4.1 Windows调度概述 175
4.4.2 优先级级别 176
4.4.3 线程的状态 181
4.4.4 调度程序数据库 186
4.4.5 量程 188
4.4.6 优先级提升 193
4.4.7 上下文切换 207
4.4.8 调度场景 208
4.4.9 空闲线程 211
4.4.10 线程的挂起 214
4.4.11 (深度)冻结 214
4.4.12 线程的选择 216
4.4.13 多处理器系统 217
4.4.14 多处理器系统中线程的选择 230
4.4.15 处理器的选择 231
4.4.16 异质调度(big.LITTLE) 233
4.5 基于组的调度 234
4.5.1 动态公平共享调度 235
4.5.2 CPU速率限制 238
4.5.3 处理器的动态添加和替换 241
4.6 工作者工厂(线程池) 242
4.7 小结 245
第5章 内存管理 246
5.1 内存管理器简介 246
5.1.1 内存管理器组件 247
5.1.2 大页面和小页面 247
5.1.3 查看内存使用情况 249
5.1.4 内部同步 252
5.2 内存管理器提供的服务 252
5.2.1 页面状态和内存的分配 253
5.2.2 提交用量和提交限制 256
5.2.3 锁定到内存 256
5.2.4 分配的粒度 257
5.2.5 共享内存和映射文件 257
5.2.6 保护内存 259
5.2.7 数据执行保护 260
5.2.8 写入时复制 263
5.2.9 地址窗口扩展 264
5.3 内核模式堆(系统内存池) 265
5.3.1 池的大小 266
5.3.2 监视内存池的使用 267
5.3.3 旁视列表 270
5.4 堆管理器 271
5.4.1 进程堆 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 堆的调试特性 280
5.4.8 页堆 280
5.4.9 容错堆 283
5.5 虚拟地址空间布局 284
5.5.1 x86地址空间布局 285
5.5.2 x86系统地址空间布局 288
5.5.3 x86会话空间 288
5.5.4 系统页表项 290
5.5.5 ARM地址空间布局 291
5.5.6 64位地址空间布局 291
5.5.7 x64虚拟寻址的局限 293
5.5.8 动态系统虚拟地址空间管理 293
5.5.9 系统虚拟地址空间配额 298
5.5.10 用户地址空间布局 298
5.6 地址转换 303
5.6.1 x86虚拟地址转换 303
5.6.2 地址转换旁视缓冲区 308
5.6.3 x64虚拟地址转换 311
5.6.4 ARM虚拟地址转换 311
5.7 页面错误的处理 312
5.7.1 无效PTE 313
5.7.2 原型PTE 314
5.7.3 页面换入I/O 316
5.7.4 冲突的页面错误 316
5.7.5 聚簇的页面错误 317
5.7.6 页面文件 317
5.7.7 提交用量和系统提交限制 322
5.7.8 提交用量和页面文件大小 325
5.8 栈 326
5.8.1 用户栈 326
5.8.2 内核栈 327
5.8.3 DPC栈 328
5.9 虚拟地址描述符 328
5.9.1 进程的VAD 329
5.9.2 旋转VAD 330
5.10 NUMA 331
5.11 节对象 331
5.12 工作集 338
5.12.1 按需换页 338
5.12.2 逻辑预取器和ReadyBoot 339
5.12.3 放置策略 341
5.12.4 工作集管理 342
5.12.5 平衡集管理器和交换器 346
5.12.6 系统工作集 346
5.12.7 内存通知事件 347
5.13 页帧编号数据库 349
5.13.1 页面列表的转换 351
5.13.2 页面优先级 357
5.13.3 已修改页面写出器和映射页面写出器 359
5.13.4 PFN的数据结构 361
5.13.5 页面文件的保留 364
5.14 物理内存的限制 366
5.15 内存压缩 369
5.15.1 压缩过程图解 370
5.15.2 压缩架构 372
5.16 内存分区 374
5.17 内存联合 376
5.17.1 搜索阶段 378
5.17.2 分类阶段 378
5.17.3 页面联合阶段 379
5.17.4 从私有到共享PTE 380
5.17.5 联合页面的释放 381
5.18 内存飞地 384
5.18.1 编程接口 385
5.18.2 内存飞地的初始化 385
5.18.3 飞地的构造 386
5.18.4 将数据载入飞地 387
5.18.5 飞地的初始化 388
5.19 前瞻性内存管理(SuperFetch) 388
5.19.1 组件 388
5.19.2 跟踪和日志记录 390
5.19.3 场景 390
5.19.4 页面优先级和重均衡 391
5.19.5 健壮性能 393
5.19.6 ReadyBoost 394
5.19.7 ReadyDrive 395
5.19.8 进程反射 395
5.20 小结 397
第6章 I/O系统 398
6.1 I/O系统组件 398
6.1.1 I/O管理器 400
6.1.2 典型的I/O处理 400
6.2 中断请求级别和延迟过程调用 402
6.2.1 中断请求级别 402
6.2.2 延迟过程调用 404
6.3 设备驱动程序 405
6.3.1 设备驱动程序的类型 406
6.3.2 驱动程序的结构 410
6.3.3 驱动程序对象和设备对象 412
6.3.4 打开设备 417
6.4 I/O的处理 421
6.4.1 I/O的类型 421
6.4.2 I/O请求包 423
6.4.3 针对单层硬件驱动程序的I/O请求 433
6.4.4 针对分层驱动程序的I/O请求 440
6.4.5 线程无关I/O 443
6.4.6 I/O的取消 443
6.4.7 I/O完成端口 447
6.4.8 I/O优先级处理 451
6.4.9 容器通知 455
6.5 驱动程序验证程序 456
6.5.1 与I/O有关的验证选项 458
6.5.2 与内存有关的验证选项 458
6.6 即插即用管理器 462
6.6.1 即插即用的支持级别 462
6.6.2 设备的枚举 463
6.6.3 设备栈 465
6.6.4 驱动程序对即插即用的支持 470
6.6.5 即插即用驱动程序的安装 472
6.7 常规驱动程序的加载和安装 475
6.7.1 驱动程序的加载 475
6.7.2 驱动程序的安装 477
6.8 Windows驱动程序基础 477
6.8.1 内核模式驱动程序框架 478
6.8.2 用户模式驱动程序框架 485
6.9 电源管理器 488
6.9.1 连接待机和新型待机 491
6.9.2 电源管理器操作 491
6.9.3 驱动程序的电源操作 492
6.9.4 驱动程序和应用程序对设备电源的控制 495
6.9.5 电源管理框架 495
6.9.6 电源可用性请求 497
6.10 小结 498
第7章 安全性 500
7.1 安全评级 500
7.1.1 可信计算机系统评估标准 500
7.1.2 通用标准 501
7.2 安全系统组件 502
7.3 基于虚拟化的安全性 504
7.3.1 Credential Guard 505
7.3.2 Device Guard 510
7.4 保护对象 512
7.4.1 访问检查 513
7.4.2 安全标识符 516
7.4.3 虚拟服务账户 533
7.4.4 安全描述符和访问控制 537
7.4.5 动态访问控制 550
7.5 AuthZ API 551
7.6 账户权限和特权 552
7.6.1 账户权限 553
7.6.2 特权 554
7.6.3 超级特权 558
7.7 进程和线程的访问令牌 559
7.8 安全审核 559
7.8.1 审核对象访问 560
7.8.2 全局审核策略 563
7.8.3 高级审核策略设置 564
7.9 AppContainer 565
7.9.1 UWP应用概述 566
7.9.2 AppContainer 567
7.10 登录 587
7.10.1 Winlogon的初始化 588
7.10.2 用户登录的步骤 590
7.10.3 可保证的身份验证 594
7.10.4 Windows Biometric Framework 595
7.10.5 Windows Hello 597
7.11 用户账户控制和虚拟化 598
7.11.1 文件系统和注册表虚拟化 598
7.11.2 权限提升 603
7.12 攻击缓解 608
7.12.1 进程缓解策略 608
7.12.2 控制流完整性 612
7.12.3 安全声明 622
7.13 应用程序标识 626
7.14 AppLocker 626
7.15 软件限制策略 630
7.16 内核补丁保护 632
7.17 PatchGuard 633
7.18 HyperGuard 635
7.19 小结 636
^ 收 起
1.1 Windows操作系统的版本 1
1.1.1 Windows 10和未来的Windows版本 3
1.1.2 Windows 10和OneCore 3
1.2 基本概念和术语 3
1.2.1 Windows API 3
1.2.2 服务、函数和例程 6
1.2.3 进程 7
1.2.4 线程 15
1.2.5 作业 17
1.2.6 虚拟内存 18
1.2.7 内核模式和用户模式 20
1.2.8 虚拟机监控程序 23
1.2.9 固件 25
1.2.10 终端服务和多会话 25
1.2.11 对象和句柄 26
1.2.12 安全性 26
1.2.13 注册表 28
1.2.14 Unicode 28
1.3 深入了解Windows内部原理 30
1.3.1 性能监视器和资源监视器 30
1.3.2 内核调试 32
1.3.3 Windows软件开发包 36
1.3.4 Sysinternals工具 37
1.4 小结 37
第 2章 系统架构 38
2.1 需求和设计目标 38
2.2 操作系统模型 39
2.3 架构概述 39
2.3.1 可移植性 41
2.3.2 对称多处理器 42
2.3.3 可伸缩性 45
2.3.4 客户端和服务器版本之间的差异 45
2.3.5 已检验版本 48
2.4 基于虚拟化的安全架构概述 49
2.5 重要的系统组件 51
2.5.1 环境子系统和子系统DLL 52
2.5.2 其他子系统 57
2.5.3 执行体 61
2.5.4 内核 63
2.5.5 硬件抽象层 66
2.5.6 设备驱动程序 69
2.5.7 系统进程 74
2.6 小结 84
第3章 进程和作业 85
3.1 创建进程 85
3.1.1 CreateProcess*函数的参数 86
3.1.2 创建Windows“现代化”进程 87
3.1.3 创建其他类型的进程 87
3.2 进程的内部构造 88
3.3 受保护进程 95
3.3.1 受保护进程轻型(PPL) 96
3.3.2 对第三方PPL的支持 99
3.4 小进程和Pico进程 100
3.4.1 小进程 100
3.4.2 Pico进程 101
3.5 Trustlet(安全进程) 102
3.5.1 Trustlet的构造 103
3.5.2 Trustlet策略元数据 103
3.5.3 Trustlet的属性 104
3.5.4 系统内置的Trustlet 104
3.5.5 Trustlet的标识 105
3.5.6 隔离用户模式服务 105
3.5.7 Trustlet可访问的系统调用 106
3.6 CreateProcess的流程 107
3.6.1 第 1阶段:转换并验证参数和标志 108
3.6.2 第 2阶段:打开要执行的映像 112
3.6.3 第3阶段:创建Windows执行体进程对象 114
3.6.4 第4阶段:创建初始线程及其栈和上下文 118
3.6.5 第5阶段:执行与Windows子系统有关的初始化工作 120
3.6.6 第6阶段:初始线程的启动执行 121
3.6.7 第7阶段:在新进程的上下文中执行进程初始化工作 122
3.7 进程的终止 126
3.8 映像加载程序 127
3.8.1 进程初始化的早期工作 129
3.8.2 DLL名称解析和重定向 131
3.8.3 已加载模块数据库 135
3.8.4 导入解析 138
3.8.5 导入过程初始化的后处理 139
3.8.6 SwitchBack 140
3.8.7 API集 142
3.9 作业 144
3.9.1 作业的限制 145
3.9.2 使用作业 146
3.9.3 嵌套的作业 146
3.9.4 Windows容器(Server Silo) 150
3.10 小结 157
第4章 线程 158
4.1 创建线程 158
4.2 线程的内部机理 159
4.2.1 数据结构 159
4.2.2 线程的诞生 169
4.3 查看线程的活动 170
4.4 线程的调度 175
4.4.1 Windows调度概述 175
4.4.2 优先级级别 176
4.4.3 线程的状态 181
4.4.4 调度程序数据库 186
4.4.5 量程 188
4.4.6 优先级提升 193
4.4.7 上下文切换 207
4.4.8 调度场景 208
4.4.9 空闲线程 211
4.4.10 线程的挂起 214
4.4.11 (深度)冻结 214
4.4.12 线程的选择 216
4.4.13 多处理器系统 217
4.4.14 多处理器系统中线程的选择 230
4.4.15 处理器的选择 231
4.4.16 异质调度(big.LITTLE) 233
4.5 基于组的调度 234
4.5.1 动态公平共享调度 235
4.5.2 CPU速率限制 238
4.5.3 处理器的动态添加和替换 241
4.6 工作者工厂(线程池) 242
4.7 小结 245
第5章 内存管理 246
5.1 内存管理器简介 246
5.1.1 内存管理器组件 247
5.1.2 大页面和小页面 247
5.1.3 查看内存使用情况 249
5.1.4 内部同步 252
5.2 内存管理器提供的服务 252
5.2.1 页面状态和内存的分配 253
5.2.2 提交用量和提交限制 256
5.2.3 锁定到内存 256
5.2.4 分配的粒度 257
5.2.5 共享内存和映射文件 257
5.2.6 保护内存 259
5.2.7 数据执行保护 260
5.2.8 写入时复制 263
5.2.9 地址窗口扩展 264
5.3 内核模式堆(系统内存池) 265
5.3.1 池的大小 266
5.3.2 监视内存池的使用 267
5.3.3 旁视列表 270
5.4 堆管理器 271
5.4.1 进程堆 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 堆的调试特性 280
5.4.8 页堆 280
5.4.9 容错堆 283
5.5 虚拟地址空间布局 284
5.5.1 x86地址空间布局 285
5.5.2 x86系统地址空间布局 288
5.5.3 x86会话空间 288
5.5.4 系统页表项 290
5.5.5 ARM地址空间布局 291
5.5.6 64位地址空间布局 291
5.5.7 x64虚拟寻址的局限 293
5.5.8 动态系统虚拟地址空间管理 293
5.5.9 系统虚拟地址空间配额 298
5.5.10 用户地址空间布局 298
5.6 地址转换 303
5.6.1 x86虚拟地址转换 303
5.6.2 地址转换旁视缓冲区 308
5.6.3 x64虚拟地址转换 311
5.6.4 ARM虚拟地址转换 311
5.7 页面错误的处理 312
5.7.1 无效PTE 313
5.7.2 原型PTE 314
5.7.3 页面换入I/O 316
5.7.4 冲突的页面错误 316
5.7.5 聚簇的页面错误 317
5.7.6 页面文件 317
5.7.7 提交用量和系统提交限制 322
5.7.8 提交用量和页面文件大小 325
5.8 栈 326
5.8.1 用户栈 326
5.8.2 内核栈 327
5.8.3 DPC栈 328
5.9 虚拟地址描述符 328
5.9.1 进程的VAD 329
5.9.2 旋转VAD 330
5.10 NUMA 331
5.11 节对象 331
5.12 工作集 338
5.12.1 按需换页 338
5.12.2 逻辑预取器和ReadyBoot 339
5.12.3 放置策略 341
5.12.4 工作集管理 342
5.12.5 平衡集管理器和交换器 346
5.12.6 系统工作集 346
5.12.7 内存通知事件 347
5.13 页帧编号数据库 349
5.13.1 页面列表的转换 351
5.13.2 页面优先级 357
5.13.3 已修改页面写出器和映射页面写出器 359
5.13.4 PFN的数据结构 361
5.13.5 页面文件的保留 364
5.14 物理内存的限制 366
5.15 内存压缩 369
5.15.1 压缩过程图解 370
5.15.2 压缩架构 372
5.16 内存分区 374
5.17 内存联合 376
5.17.1 搜索阶段 378
5.17.2 分类阶段 378
5.17.3 页面联合阶段 379
5.17.4 从私有到共享PTE 380
5.17.5 联合页面的释放 381
5.18 内存飞地 384
5.18.1 编程接口 385
5.18.2 内存飞地的初始化 385
5.18.3 飞地的构造 386
5.18.4 将数据载入飞地 387
5.18.5 飞地的初始化 388
5.19 前瞻性内存管理(SuperFetch) 388
5.19.1 组件 388
5.19.2 跟踪和日志记录 390
5.19.3 场景 390
5.19.4 页面优先级和重均衡 391
5.19.5 健壮性能 393
5.19.6 ReadyBoost 394
5.19.7 ReadyDrive 395
5.19.8 进程反射 395
5.20 小结 397
第6章 I/O系统 398
6.1 I/O系统组件 398
6.1.1 I/O管理器 400
6.1.2 典型的I/O处理 400
6.2 中断请求级别和延迟过程调用 402
6.2.1 中断请求级别 402
6.2.2 延迟过程调用 404
6.3 设备驱动程序 405
6.3.1 设备驱动程序的类型 406
6.3.2 驱动程序的结构 410
6.3.3 驱动程序对象和设备对象 412
6.3.4 打开设备 417
6.4 I/O的处理 421
6.4.1 I/O的类型 421
6.4.2 I/O请求包 423
6.4.3 针对单层硬件驱动程序的I/O请求 433
6.4.4 针对分层驱动程序的I/O请求 440
6.4.5 线程无关I/O 443
6.4.6 I/O的取消 443
6.4.7 I/O完成端口 447
6.4.8 I/O优先级处理 451
6.4.9 容器通知 455
6.5 驱动程序验证程序 456
6.5.1 与I/O有关的验证选项 458
6.5.2 与内存有关的验证选项 458
6.6 即插即用管理器 462
6.6.1 即插即用的支持级别 462
6.6.2 设备的枚举 463
6.6.3 设备栈 465
6.6.4 驱动程序对即插即用的支持 470
6.6.5 即插即用驱动程序的安装 472
6.7 常规驱动程序的加载和安装 475
6.7.1 驱动程序的加载 475
6.7.2 驱动程序的安装 477
6.8 Windows驱动程序基础 477
6.8.1 内核模式驱动程序框架 478
6.8.2 用户模式驱动程序框架 485
6.9 电源管理器 488
6.9.1 连接待机和新型待机 491
6.9.2 电源管理器操作 491
6.9.3 驱动程序的电源操作 492
6.9.4 驱动程序和应用程序对设备电源的控制 495
6.9.5 电源管理框架 495
6.9.6 电源可用性请求 497
6.10 小结 498
第7章 安全性 500
7.1 安全评级 500
7.1.1 可信计算机系统评估标准 500
7.1.2 通用标准 501
7.2 安全系统组件 502
7.3 基于虚拟化的安全性 504
7.3.1 Credential Guard 505
7.3.2 Device Guard 510
7.4 保护对象 512
7.4.1 访问检查 513
7.4.2 安全标识符 516
7.4.3 虚拟服务账户 533
7.4.4 安全描述符和访问控制 537
7.4.5 动态访问控制 550
7.5 AuthZ API 551
7.6 账户权限和特权 552
7.6.1 账户权限 553
7.6.2 特权 554
7.6.3 超级特权 558
7.7 进程和线程的访问令牌 559
7.8 安全审核 559
7.8.1 审核对象访问 560
7.8.2 全局审核策略 563
7.8.3 高级审核策略设置 564
7.9 AppContainer 565
7.9.1 UWP应用概述 566
7.9.2 AppContainer 567
7.10 登录 587
7.10.1 Winlogon的初始化 588
7.10.2 用户登录的步骤 590
7.10.3 可保证的身份验证 594
7.10.4 Windows Biometric Framework 595
7.10.5 Windows Hello 597
7.11 用户账户控制和虚拟化 598
7.11.1 文件系统和注册表虚拟化 598
7.11.2 权限提升 603
7.12 攻击缓解 608
7.12.1 进程缓解策略 608
7.12.2 控制流完整性 612
7.12.3 安全声明 622
7.13 应用程序标识 626
7.14 AppLocker 626
7.15 软件限制策略 630
7.16 内核补丁保护 632
7.17 PatchGuard 633
7.18 HyperGuard 635
7.19 小结 636
^ 收 起
帕维尔·约西沃维奇(Pavel Yosifovich)是一位精通微软技术和工具的开发者、讲师,还是微软 MVP 以及在线教育网站 Pluralsight 的签约作者。 亚历克斯·伊奥尼斯库(Alex Ionescu) 是CrowdStrike 的 EDR 战略副总裁,也是底层系统软件、操作系统研究与内核开发、 安全培训和逆向工程领域的专家。他曾在世界各地讲授有关 Windows 内部机理的课程,并活跃于安全研究社区,多次参加会议讲座和 bug 赏金计划。 马克· E.鲁辛诺维奇( Mark E.Russinovich)是 Microsoft Azure( 微软的全球化、企业级云平台)的首席技术官。他是分布式系统和操作系统领域的专家,曾是 Winternals Software 公司的联合创始人,并在该公司被微软收购后加入了微软。他还是 Sysinternals 工具的发明者和Sysinternals 网站的创立者。 大卫· A . 所罗门(David A. Solomon)在其退休前的 20 余年里,不遗余力地为众多开发者和 IT 专业人士讲授有关 Windows 内核接口的课程。 在出版了自己的本书 Windows NT for OpenVMS Professionals 后,他撰写了 Inside Windows NT 的第 2 版,并与马克·E.鲁辛诺维奇合著了第3 ~ 6 版。他曾多次在微软的大会上发言,并于 1993 年和 2005 年荣获微软有价值专家(MVP)奖项。
^ 收 起
^ 收 起
本书基于Windows 10和Windows Server 2016编写,深入解析Windows操作系统的系统架构、进程、线程、内存管理等知识,旨在帮助读者了解Windows 10和Windows Server 2016操作系统内部工作原理,使之在针对Windows平台开发应用程序时,可以更好地理解不同设计机制间的关系。
本书先介绍Windows的基本概念和工具以及Windows的架构和主要组件,然后详细介绍进程和作业、内存管理、I/O系统等内容,*后介绍Windows内置的安全机制以及用于阻止滥用的各种缓解措施。
本书辅以大量实验,并给出了具体步骤,可供读者自行尝试,让他们通过内核调试器、Sysinternals工具和专为本书内容开发的其他工具一窥Windows的工作原理,进而能够将这些知识应用于改进应用程序设计、调试以及系统性能和支持。
本书适合希望了解Windows 10和Windows Server 2016操作系统内部工作原理的开发者、系统管理员及安全研究人员阅读。
^ 收 起
本书先介绍Windows的基本概念和工具以及Windows的架构和主要组件,然后详细介绍进程和作业、内存管理、I/O系统等内容,*后介绍Windows内置的安全机制以及用于阻止滥用的各种缓解措施。
本书辅以大量实验,并给出了具体步骤,可供读者自行尝试,让他们通过内核调试器、Sysinternals工具和专为本书内容开发的其他工具一窥Windows的工作原理,进而能够将这些知识应用于改进应用程序设计、调试以及系统性能和支持。
本书适合希望了解Windows 10和Windows Server 2016操作系统内部工作原理的开发者、系统管理员及安全研究人员阅读。
^ 收 起
比价列表