核心概念与前置知识
在开始看视频之前,你必须具备以下基础知识,否则会非常吃力:

- C 语言精通:这是基础中的基础,你需要非常熟悉指针、结构体、内存管理、位运算等,内核编程中大量的代码都是 C 语言。
- 操作系统原理:理解进程、线程、虚拟内存、内核态与用户态、系统调用、同步与互斥等概念,这是理解驱动程序如何与操作系统交互的理论基础。
- 计算机体系结构:了解 CPU 的工作模式(实模式、保护模式)、中断、DMA(直接内存访问)等。
- 数据结构与算法:链表、队列、哈希表等是内核中最常用的数据结构。
必备工具与环境
- 操作系统:
- Windows 10/11 专业版/企业版:这是开发环境。
- Windows 10/11 IoT Enterprise 或 Windows Server:这是测试环境。强烈建议不要在你的主开发机上直接进行内核调试! 使用虚拟机或另一台物理机作为目标机。
- 开发工具:
- Visual Studio:推荐使用 Visual Studio 2025 或 Visual Studio 2025,在安装时,务必勾选 “使用 C++ 的桌面开发” 工作负载,这包含了编译器和 Windows SDK。
- Windows Driver Kit (WDK):这是微软官方提供的驱动开发工具集,包含了头文件、库、工具和示例,它会与 Visual Studio 无缝集成,下载时选择与你的 Visual Studio 版本匹配的 WDK。
- 调试环境:
- WinDbg (Windows Debugger):内核调试的利器,你需要两个版本:
- WinDbg Preview (在 Microsoft Store 中获取):用于在宿主机上调试用户模式程序或通过本地内核调试连接。
- WinDbg Classic (在 WDK 中包含):主要用于通过串口、网络等方式进行双机内核调试。
- 虚拟机软件:VMware Workstation Pro 或 VirtualBox,用于创建一个干净的测试环境。
- 调试器配置:你需要配置宿主机(运行VS)和目标机(虚拟机或另一台电脑)之间的连接,最常用的是 网络连接。
- WinDbg (Windows Debugger):内核调试的利器,你需要两个版本:
推荐视频教程
视频教程是入门最快的方式,以下资源按推荐度排序,从入门到进阶。
官方资源 (最权威,最推荐)
- Microsoft Learn - Windows Driver Development
- 链接: https://learn.microsoft.com/zh-cn/windows-hardware/drivers/
- 简介: 这是微软官方的文档中心,内容最权威、最全面,涵盖了从入门到高级的所有主题,它包含了大量的概念解释、代码示例和最佳实践。建议将此作为你的主要学习资料和参考手册。
- 特点: 文档化,系统性强,更新及时。
国内优秀视频教程 (中文,易于理解)
-
Bilibili - Windows 内核与驱动开发系列 (作者:郑彦兴 / xiaxiachen)
- 链接: https://www.bilibili.com/video/BV1x4411e7JQ
- 简介: 这是目前国内公认的最系统、最经典的 Windows 驱动入门视频教程,讲师郑彦兴是业内专家,讲解非常细致,从环境搭建到第一个 "Hello, World" 驱动,再到各种驱动模型的实践,一步步带你入门。
- 特点: 中文讲解,系统性强,内容经典,适合零基础入门。如果你是新手,从这里开始是最好的选择。
-
Bilibili - Windows 内核安全 (作者:VegetableSauce / 蔬菜汁)
- 链接: 搜索 "Windows 内核安全" 或 "VegetableSauce"
- 简介: 这一系列视频更侧重于安全领域的驱动开发,如 Rootkit 技术、Hook 技术、反反调试等,内容非常硬核,适合有一定基础后想深入安全方向的学习者。
- 特点: 深度高,聚焦安全,实战性强。
国际知名视频教程 (英文,内容前沿)
-
YouTube - The Cyber Mentor
(图片来源网络,侵删)- 链接: 搜索 "The Cyber Mentor Windows Driver Development"
- 简介: 这位博主有很多关于 Windows 内核和驱动开发的视频,讲解清晰,注重实践,他的内容偏向于安全研究,但基础部分非常适合初学者。
- 特点: 英文,实践导向,内容有趣。
-
Udemy - Windows Kernel Programming (作者: Pavel Yosifovich)
- 链接: https://www.udemy.com/course/windows-kernel-programming/
- 简介: Pavel Yosifovich 是一位资深的 Windows 内核专家,这本书(《Windows Kernel Programming》)的作者,他的课程非常系统,内容深入,是付费课程中的精品。
- 特点: 系统性强,内容深入,由顶级专家授课。
推荐书籍
视频教程可能不够深入,书籍能提供更系统、更详尽的解释。
- 《Windows内核编程》(Windows Kernel Programming)- Pavel Yosifovich
- 简介: 当前 Windows 驱动开发领域的“圣经”全面、清晰、准确,涵盖了从基础到高级的所有重要主题,如果你只买一本书,就买这本,它完美地补充了官方文档和视频教程。
- 《Windows驱动开发权威指南》(Windows® System Programming, Fifth Edition)- Rex Jaeschke
- 注意: 这本书更侧重于用户模式的系统编程,而不是内核驱动,但对于理解 Windows API、进程、线程、内存管理等非常有帮助,是内核开发的重要前置知识。
- 《Windows Internals》(Windows Internals, Part 1, 2, 3, 4, 5)- Mark E. Russinovich, David A. Solomon
- 简介: 深入剖析 Windows 内部工作原理的“大部头”,它不教你如何写驱动,但它能让你理解驱动运行的底层环境,比如对象管理、安全模型、内存管理、I/O 系统等,当你遇到疑难问题时,查阅这本书能帮你找到根本原因。
循序渐进的学习计划
-
第一阶段:环境准备与基础 (1-2周)
- 目标: 搭建好开发和调试环境,并成功编译和加载第一个驱动。
- 任务:
- 安装 Visual Studio 和 WDK。
- 学习 WinDbg 的基本使用,配置好本地内核调试。
- 阅读官方文档中的 "Getting Started" 部分。
- 观看 B 站郑彦兴老师的视频,跟着他的步骤,创建一个简单的 "Hello, World" 驱动,并使用
DbgPrint在 WinDbg 中输出信息。 - 关键: 理解驱动加载、卸载的基本流程,以及
DriverEntry函数的作用。
-
第二阶段:核心模型学习 (2-4周)
- 目标: 掌握 Windows 驱动的核心编程模型。
- 任务:
- WDM (Windows Driver Model): 学习 IRP (I/O 请求包) 的基本概念,如何创建和分发 IRP,这是理解 Windows I/O 系统的基础。
- WDF (Windows Driver Framework): 这是微软现在主推的驱动开发框架,它极大地简化了驱动开发的复杂性。强烈建议直接学习 WDF。
- 学习 KMDF (Kernel-Mode Driver Framework) 的基本结构:WDFDEVICE, WDFREQUEST, WDFQUEUE 等。
- 实践一个简单的字符设备驱动,实现
Create,Read,Write,Close等分发例程。
- 同步机制: 学习内核中的同步,如自旋锁、互斥体、事件等,理解它们的区别和使用场景。
- 内存管理: 学习内核内存分配(
ExAllocatePool),以及如何与用户模式程序共享内存(MmMapLockedPagesSpecifyCache)。
-
第三阶段:硬件交互与高级主题 (1-2个月)
- 目标: 学习如何与硬件交互,并了解更复杂的驱动类型。
- 任务:
- 即插即用 (PnP): 理解设备枚举、安装、启动的过程,学习处理 PnP 请求(
IRP_MJ_PNP)。 - 电源管理: 学习处理电源状态变化请求(
IRP_MJ_POWER)。 - DMA 编程: 如果你的驱动需要操作硬件,学习如何使用 DMA 进行高效的数据传输。
- 过滤驱动: 学习如何编写一个过滤驱动来拦截和修改另一个驱动的 IRP。
- 文件系统驱动: 这是一个非常复杂的领域,可以作为长期目标,可以先从理解其基本概念开始。
- 即插即用 (PnP): 理解设备枚举、安装、启动的过程,学习处理 PnP 请求(
-
第四阶段:实战与深化 (持续进行)
- 目标: 通过实际项目巩固知识,并探索特定领域。
- 任务:
- 分析现有驱动: 使用 WinDbg 和工具(如 WinObj, Process Explorer)来分析系统自带的驱动或第三方驱动。
- 参与开源项目: 在 GitHub 上寻找一些简单的驱动项目,尝试阅读和修改它们的代码。
- 选择方向:
- 安全方向: 学习 Rootkit 技术、Hook 技术、反病毒驱动等。
- 虚拟化/仿真: 学习如何编写虚拟设备(如虚拟硬盘、网卡)。
- 性能优化: 深入研究如何优化驱动程序以获得最佳性能。
最后的重要提醒
- 安全第一: 内核崩溃就是蓝屏,在虚拟机中进行所有测试,养成良好习惯,每次修改代码后,先在虚拟机中测试,确认无误再考虑在真实硬件上测试。
- 多查文档: MSDN 是你的朋友,遇到任何函数、结构体、宏,第一时间查阅官方文档。
- 调试是核心: 学会使用 WinDbg 是驱动开发者的必备技能。
!analyze,k,dt,!drvobj等命令是日常调试的利器。 - 耐心与毅力: 驱动开发学习曲线陡峭,遇到问题是常态,保持耐心,多思考,多搜索,多请教。
祝你学习顺利!
