《Windows内核编程》全书总复习
用控制设备、系统通知、进程保护、文件备份小过滤器和设备监视器串联全书11章与185个核心目录层级。 覆盖6个本页目录坐标。
学习目标
- 把对象、构建、生命周期、调试、机制、IRP、通知、过滤、签名和发布安全落实为Windows build、驱动模型、内核对象、执行上下文、调用链与恢复条件
- 只注入“跨子系统同时注错、混用驱动包或只保留最终蓝屏与一次成功重启”,定位本章相对签名参考驱动的首个分岔
- 交付全书目标清单、跨章对象ID、逐故障轨迹、转储/符号与卸载回归报告,明确区分中文版一版、作者二版迁移轨与目标Microsoft平台轨
直觉起点
本章的核心问题是:从对象与构建到IRQL、IRP、通知、Minifilter、签名和恢复,怎样完成跨章驱动证据链?
、、、、共同构成本页坐标。用控制设备、系统通知、进程保护、文件备份小过滤器和设备监视器串联全书11章与185个核心目录层级。
内核编程必须同时画三张图:调用图说明用户请求、系统回调或I/O如何进入驱动;对象图说明DriverObject、DeviceObject、IRP、回调Cookie、上下文和池块由谁拥有;时间图说明注册、并发回调、注销、排空和卸载的先后。少一张图,表面可用的驱动也可能在压力或卸载时蓝屏。
来源合同与版本差异
本章以作者一版Leanpub完整公开目录核对Pavel Yosifovich《Windows Kernel Programming》2020-12-10版本、455页和11章结构;中文版采用李亮译《Windows内核编程》,机械工业出版社2021年版,ISBN 9787111684756。中文版治理清单是11章185个正式坐标,章根已计入;作者一版公开目录按同口径是204个坐标,两者相差19项。
官方18页样章开放一版身份、第一章目录以及进程、虚拟内存、线程和系统调用的局部正文,因此本站来源访问级别是authorized-sample。样章不授权其余正文、代码、图表或练习;本章是中文独立教学重构,不复制未开放内容。
本章登记的19项差异是:第1章:Thread Stacks;第2章:Exercises;第5章:Tutorial: User mode debugging basics;第6章:Using DPC with a Timer;第6章:Critical Regions and Guarded Regions;第6章:The Spin Lock;第7章:IRP Flow;第7章:Viewing IRP Information;第7章:Completing a Request;第8章:The User Mode Client;第8章:Exercises;第9章:Desktop Objects;第9章:Exercises;第10章:Pipes and Mailslots;第10章:Direct Access Volume (DAX or DAS);第10章:Context Types;第10章:Managing Contexts;第10章:Exercises;第11章:Example Driver Verifier Sessions。它们可能来自译本底稿、修订时点或目录裁剪;没有出版社正文证据就保持“来源差异”,不补成中文版坐标,也不把作者页面的后续更新倒写给译者。
本章把三条轨道分开:中文版/作者一版解释成书范围;作者二版及MIT示例仓库只做迁移参考;当前平台轨以Microsoft Learn和目标系统公开DDI核对。本章的实验必须记录完整Windows build、架构、SDK、WDK、Visual Studio、驱动模型、签名、VBS/HVCI、驱动包摘要和符号,不能只写Windows 11或latest。
本章涉及内核代码、驱动部署、回调、用户缓冲区、Minifilter、Verifier和故障调试。本章页面只给实验协议;执行仅允许在可丢弃VM或专用测试机,并预备快照、备份、宿主内核调试、崩溃转储、超时、恢复启动和Verifier reset。生产设备、日常主机和无法承受蓝屏或数据损坏的对象不在实验范围内。
本页独立事实来源
- 作者一版Leanpub页面与完整公开目录:本章用它核对Pavel Yosifovich、2020-12-10版本、455页、11章公开目录与软件内核驱动范围。
- 作者一版Leanpub官方18页授权样章:本章用它局部核对一版身份、第一章目录及进程、虚拟内存、线程和系统调用开放正文;不扩大整书授权。
- 作者二版Leanpub页面与完整公开目录:本章用它建立二版迁移轨,识别新增章节和接口;不把二版倒写成2021年中文版。
- 作者二版MIT示例仓库:本章用它核对当前作者示例的章节归属、提交与许可;仓库只对应二版。
- Microsoft Windows内核DDI参考:本章用它核对目标build公开DDI、对象、IRP和例程合同。
- Microsoft内核模式驱动架构指南:本章用它核对I/O、DPC、同步、PnP、电源和驱动编程当前路由。
- Microsoft驱动安全清单:本章用它核对内核必要性、最小权限、WDF、HVCI、测试、签名和发布门。
- Microsoft Driver Verifier指南:本章用它核对只在测试机启用、目标驱动选择、bug check、查询和reset恢复。
- Microsoft Windows调试入门:本章用它核对WinDbg、宿主—目标、符号和转储调试当前边界。
- Microsoft分发例程中的IRP完成规则:本章用它核对验证、下传、完成与状态/信息字段的所有权。
- Microsoft ObRegisterCallbacks DDI:本章用它核对注册句柄、前后回调与卸载前注销合同。
- Microsoft Minifilter装入与卸载:本章用它核对FltRegisterFilter、FltStartFiltering、实例、端口和反向卸载。
- Microsoft文件系统过滤器验证:本章用它核对callback data、context、名称信息与引用泄漏验证。
常见误区与故障注入
本章注入的故障是:跨子系统同时注错、混用驱动包或只保留最终蓝屏与一次成功重启。在实验中,保持其余条件不变,只注入这个故障,记录首个分岔与竞争性解释。
四类样本与验收
| 样本 | 注入方式 | 必查证据 | 通过条件 |
|---|---|---|---|
| 基线 | 固定快照、sys/PDB和输入 | 状态码、IRQL、对象与日志 | 与预测一致 |
| 边界 | 空缓冲、短输出、断开客户端 | 长度、Information、引用 | 不越界不泄漏 |
| 失败 | 错IRQL、竞态、Verifier规则 | 首错栈和责任层 | 故障可定位 |
| 恢复 | 清理或快照后同输入重放 | 模块、服务、池、回调状态 | 回到基线 |
本章验收不变量:唯一故障的首错可归因,撤销后所有回调、IRP、引用、端口、实例和设备恢复基线
本章必查证据:全书目标清单、跨章对象ID、逐故障轨迹、转储/符号与卸载回归报告
交互实验 — 全书证据链
以下三个视图分别冻结版本合同、调整执行探针并重放安全门。每个视图都保留重置,不生成驱动成熟度、风险或性能综合分。
版本合同:选择坐标、出版轨与IRQL
版本—驱动模型—执行上下文合同
《Windows内核编程》185坐标全书驱动证据总复习
先选正式坐标,再分开一版、二版与目标平台,并冻结真实IRQL边界。
坐标 1/185
第1章 Windows内部概览
- 版本身份
- 中文版以2021年机械工业出版社版为范围;作者一版页面与18页授权样章只支持目录、版本及开放页核对。
- 来源与迁移边界
- 中文版185坐标与作者一版公开目录204坐标存在19项差异;差异项只能标注,不得冒充中文版缺失正文。
- PASSIVE_LEVEL
- 记录调用线程、进程上下文、可分页性、等待、用户缓冲区捕获、锁和卸载状态;不能仅凭例程名推断上下文。
练习
练习
问题 1:实验设计
请围绕以下问题设计一个可重现实验:从对象与构建到IRQL、IRP、通知、Minifilter、签名和恢复,怎样完成跨章驱动证据链?
问题 2:故障识别与避免
如果在实验中观察到“跨子系统同时注错、混用驱动包或只保留最终蓝屏与一次成功重启”,如何定位根因?如何避免?
问题 3:来源差异处理
中文版有185个目录坐标,作者一版有204个,两者相差19项。应如何处理这些差异?
问题 4:安全边界与停止条件
什么情况下必须停止内核实验?
小结
-
隔离虚拟机:连接“恢复干净快照”的内核契约与证据。
-
IRP证据:连接“构建签名驱动”的内核契约与证据。
-
通知回调:连接“运行控制设备”的内核契约与证据。
-
Minifilter:连接“验证系统通知”的内核契约与证据。
-
Verifier闭环:连接“运行过滤项目”的内核契约与证据。
-
本页6个目录坐标全部进入实验链,不以泛化驱动主题替代原书内容。
-
来源合同:中文版185坐标与作者一版204坐标的19项差异已登记,三条轨道分开,互不倒写。
术语表
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 跨章对象ID
跨章对象ID是本章的入口概念。从对象与构建到IRQL、IRP、通知、Minifilter、签名和恢复,怎样完成跨章驱动证据链?从这个概念开始建立可调试关系。它必须绑定进程、build、架构与生命周期,并在全书目标清单、跨章对象ID、逐故障轨迹、转储/符号与卸载回归报告中留下可验证记录。
- 逐故障轨迹
逐故障轨迹在本章中用于构造可撤销反例。注入故障“跨子系统同时注错、混用驱动包或只保留最终蓝屏与一次成功重启”后,它的状态变化是首个分岔的关键信号,必须与签名参考基线对比。
- 卸载回归报告
卸载回归报告必须满足不变量“唯一故障的首错可归因,撤销后所有回调、IRP、引用、端口、实例和设备恢复基线”。在实验中,它的记录是验收通过的条件之一,不能以一次成功加载替代。
- 唯一故障
唯一故障连接本章的目录坐标与实验链。不以泛化驱动主题替代原书内容,每个坐标都进入可复核的故障注入与恢复验收。