如果你已经能看懂 WDM 的基本框架,能对着 WDK 文档把 DriverEntry 和几个分发例程写出来,却在一遇到 IRP 就卡壳、看到「完成例程」「取消例程」这些词就绕开走,那这门《Windows驱动编程基础(下)》就是冲着你这些具体缺口来的。上篇把驱动怎么加载、设备对象怎么创建这些门面问题讲完了,下篇要解决的是真正让驱动跑起来、稳下来的部分——IRP 的分层处理、即插即用与电源状态的迁移、以及出错时怎么不让整个系统蓝屏。
这门课要补的三个缺口
第一是 IRP 的完整生命周期。很多人写驱动时只会处理最直接的 IRP_MJ_READ/WRITE,遇到 IO_STACK_LOCATION 里向下传递的栈单元就不知道怎么填。课程会围绕 IRP 的创建、传递、完成例程的挂接与返回状态讲清楚的路径,尤其是「谁负责完成 IRP」这件事在分层驱动里的分工。
第二是 PnP 与电源管理。驱动不是加载完就完事,设备的插拔、系统的休眠与唤醒都会给驱动发来一组特定 IRP。这部分如果只是照抄例子,换一个设备类型就会出现设备无法启动或卸载蓝屏。课程按状态迁移的顺序梳理,让你知道每个 IRP 到来时驱动该做什么、不该做什么。
第三是同步与错误处理。自旋锁、中断请求级别(IRQL)、DPC 这些概念在上篇可能只提了名词,下篇里它们会直接出现在代码路径上。搞不清什么代码能跑在什么 IRQL 上,轻则死锁,重则随机崩溃。
配套练习与复盘重点
章节笔记不是目录的复述,而是每个主题下「容易写错的那几行」。建议做法是:每看完一段,先合上资料,自己对着 WDK 头文件把关键结构体的字段含义写一遍,再回去核对。尤其是 IO_STACK_LOCATION 和 DEVICE_OBJECT 里的几个指针,能不能默写出它们指向什么、由谁负责释放,直接决定你是「会改样例」还是「能独立写逻辑」。
- 每学完一类 IRP,尝试在纸上画出它从 I/O 管理器到驱动、再到下层驱动的路径,标出完成例程的挂接位置。
- 把课程里出现的每个 IRQL 约束记下来,遇到不确定的 API 先查它要求的 IRQL,而不是先编译。
- 针对 PnP 与电源 IRP,做一个状态表:当前设备状态 × 收到的 IRP = 应返回的状态与动作。
看完应该能回答的问题
检验自己是否真的补上了缺口,可以拿下面几个问题卡一卡:一个上层驱动把 IRP 传递到下层后,什么情况下可以返回 STATUS_PENDING?完成例程里能不能调用会阻塞的函数,为什么?设备被意外拔出时,驱动应该在哪一步释放资源才不会留下悬空指针?系统进入低功耗状态前,驱动收到的那组 IRP 按什么顺序到达?这些问题在面试和实际调试里出现的频率,比背出多少个 API 名称高得多。
适合谁、按什么节奏学
已经写过至少一个能加载运行的简单驱动、或者在维护老驱动时被 PnP 和 IRP 卡过的人,学这门课的收益最直接。如果完全没碰过 WDK 编译环境,建议先补上篇再回来。节奏上不必赶进度,IRP 和电源管理两部分的示例值得反复看,每看一遍都会发现上次漏掉的返回状态判断——这类细节正是驱动稳定性的分界线。
53d3bb550c9be4a994a37f459da3df06_51f9c434153885649b14954249418b863e6aed.webp 下载附件 保存到相册 2025-1-10 16:26 上传
课程推荐
《Windows驱动编程基础(下)价值200》53d3bb550c9be4a994a37f459da3df06_51f9c434153885649b14954249418b863e6aed.webp 下载附件 保存到相册 2025-1-10 16:26 上传【技能收获】学完可掌握:核心实战技能、项目驱动学习。课程以实战为导向,覆盖从基础概念到完整项目落地的关键步骤,配套章节笔记便于课后复盘与面试前快速回顾。【学习建议】建议按目录顺序学习,先打基础再进入综合实战章节;每完成 2~3 节可结合笔记整理一份学习小结,最终尝试独立复现一套完整 Demo 写入个人作品集。【就业发展】可面向岗位:Linux 运维工程师、SRE、云计算工程师、DevOps 工程师。云原生与自动化运维仍是企业 IT 刚需方向,认证 + 实战项目组合能显著提升面试通过率,适合向中高级运维或架构岗进阶。 若你已有一定编程或运维基础,本课程可帮助你在现有技能栈上快速叠加热门方向能力,提升求职时的项目说服力与薪资谈判空间。
视频目录(33 节)
* 1 从DeviceIoControl说起.mp4
* 2 控制码通信.mp4
* 3 内存的使用.mp4
* 4 端口的读写和PC喇叭的驱动.mp4
* 5 在内核执行应用层代码.mp4
* 6 分层驱动与键盘过滤.mp4
* 7 IoMarkIrpPending.mp4
* 8 列举设备栈.mp4
* 9 系统调用.mp4
* 10 查找SSDT以及系统调用.mp4
* 11 第二种查找SSDT的方法.mp4
* 12 更强的WriteProcessMemory.mp4
* 13 PCI配置空间背景.mp4
* 14 PCI配置地址空间.mp4
* 15 列举PCI设备.mp4
* 16 即插即用概述.mp4
* 17 设备接口.mp4
* 18 驱动安装过程详解一.mp4
* 19 驱动安装过程详解二.mp4
* 20 Filter_Resource.mp4
* 21 Start_device.mp4
* 22 资源使用.mp4
* 23 获得物理设备对象和总线信息.mp4
* 24 确保驱动不被卸载.mp4
* 25 电源管理.mp4
* 26 电源状态的上升和下降.mp4
* 27 电源管理优化.mp4
* 28 过滤驱动框架.mp4
* 29 过滤驱动的概念和安装.mp4
* 30 IRP处理总结.mp4
* 31 物理设备对象的创建.mp4
* 32 总线设备安装结果略看.mp4
* 33 总线驱动处理PDO的IRP.mp4




