驱动篇——开发环境配置
写在前面
此系列是本人一个字一个字码出来的,包括示例和实验截图。由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新。 如有好的建议,欢迎反馈。码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作。如想转载,请把我的转载信息附在文章后面,并声明我的个人信息和本人博客地址即可,但必须事先通知我。
你如果是从中间插过来看的,请仔细阅读 羽夏看Win系统内核——简述 ,方便学习本教程。
看此教程之前,问一个问题,你明确学驱动的目的了吗? 没有的话就不要继续了,请重新学习 羽夏看Win系统内核——驱动篇 里面的内容。
🔒 华丽的分割线 🔒
开发环境配置
Microsoft官方提供了指导,点击 该链接 转到官方指导页面。 怎么装
VS和
Windows 11 SDK我就不赘述了。注意,如果你没有装
Windows 11 SDK,直接安装
Windows 11 WDK,驱动的关键头文件你会没有。 接下来说一下怎么装
Windows 11 WDK,下载好后运行,你会看到如下情况:
选择好安装目录,点击继续,然后会到下图所示情况,选中否,它会收集你的一些信息:
最后按照正常操作就行了,最后会弹出安装插件的窗体(忘了截图了,和正常安装
VS插件一样的窗体),点击
Modify。这个插件会提供一些编写驱动的模板,这东西至关重要,帮我们减少了大量的配置人力。
安装好之后,我们进行一个测试。开启
VS,选择新建项目,如果编写在
XP下面的驱动的话,注意选择
Empty WDM Driver,如下图所示:
后面就像正常新建项目一样起个名字新建就行,你就会得到一个新的空项目。然后添加一个源文件,如下图所示:
为什么要用
C,而不用
C++呢?
C++虽然更加强大,提供类的功能。但
C更加简单,对于我们来说就足够了,除非你用其开发大型驱动程序。 新建完毕后,我们用下面的代码:
#include <ntddk.h> //驱动程序必备头文件 NTSTATUS UnloadDriver(PDRIVER_OBJECT DriverObject) { DbgPrint("Chapter Driver By WingSummer,Unloaded Successfully!"); } NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) { DbgPrint("Chapter Driver By WingSummer,Loaded Successfully!"); DriverObject->DriverUnload = UnloadDriver; return STATUS_SUCCESS; }
DbgPrint意思是输出调试信息,那我为什么要用英文而不用中文呢?因为中文在
WinDbg进行源码调试的时候,中文会乱码,所以用英文更好些,但调试信息输出的中文并不会乱码。
DriverEntry是驱动程序的入口,和正常的C语言程序的
main函数是一样的,只是入口的参数不一样。其它的细节将会在下一篇进行讲解,就把代码复制到
VS就行了。
代码写好了,我们需要对工程进行配置,否则驱动
XP用不了:
🚀 更改目标平台,否则XP报无效驱动程序 🚀
🚀 用不到,关掉它 🚀
🚀 用不到,关掉它 🚀
设置好后,我们就可以编译了。然而理想很美好,现实很残酷。编译失败了:
报错说明需要
缓解了Spectre漏洞的库这个东西,不知道是干啥的。但我们必须安装上,否则驱动编译不了啊。好,启动
Visual Studio Installer,修改它,安装如下图所示文件:
安装好,重启
VS,打开原先我们建好的项目,继续编译,结果又报错,不过错误不是原来的了:
对于这个错误,我们只需要设置一个就可以解决,如下图所示:
设置完毕后,再编译一下,编译通过,成功生成了驱动文件。然后我们把它拖到虚拟机中,利用驱动加载工具来试一试驱动是否可用:
发现
DebugView正常显示我们想要输出的调试字符串,证明驱动正常工作。以上的配置过程也就完成了一半。
调试环境配置
调试是十分重要的一个环节。那么我们如何进行调试呢?打开
WinDbg的设置,需要添加你开发驱动的工程目录,如下图所示:
这个添加的符号目录因自己的开发驱动的位置而异,不要盲目把我的目录给添加上。然后点击确定。注意,更改需要调试器处于空闲非调试状态才能设置。 然后我们在上面的源代码中,添加一个手动断点,如下所示:
#include <ntddk.h> NTSTATUS UnloadDriver(PDRIVER_OBJECT DriverObject) { DbgPrint("Chapter Driver By WingSummer,Unloaded Successfully!"); } NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) { DbgPrint("Chapter Driver By WingSummer,Loaded Successfully!"); DriverObject->DriverUnload = UnloadDriver; _asm { int 3; } return STATUS_SUCCESS; }
再重新编译,拖到虚拟机中进行注册和运行,就会触发这个断点,
WinDbg就会接管并自动弹出一个窗体用来显示调试源代码:
帮助文档
网上有最新版的
WDK文档,但文档主要是针对
Win10开发驱动的,有很多
API是
XP没有的。请到 羽夏看Win系统内核——简述 下载
WDK帮助文档。然后下载成功解压,并运行
Docs.msi安装程序进行安装即可。最后的帮助文档效果如下图所示:
综上,环境就配置完毕了,本文结束。
下一篇
- Django开发环境与生产环境的配置
- VC6.0中OpenGL开发环境配置
- eclipse 下配置 struts 开发环境
- Symbian^3开发环境配置
- java开发环境配置(win8 64位)
- Cordova 10 VS2013配置cordova开发环境
- Cocos2d-x window开发环境配置安装教程
- Ubuntu下配置java+Eclipse开发环境
- Eclipse 配置python的开发环境
- 一起来玩WebApp第1篇---配置开发环境(上)
- QT creator+OpenCV2.4.2+MinGW 在windows下开发环境配置
- ubuntu下配置VIM做PHP的IDE开发环境
- Lucene开发环境配置;Lucene开发包中Demo调试。
- 第1章 Java基本概念及环境配置——FAQ1.12 如何安装Java基本开发环境JDK?
- Ubuntu 11.04安装配置Android开发环境
- Andriod开发(1)——eclipse环境变量的配置
- 跨平台GUI--Qt windows 开发环境安装配置(VS2005+QT+IntegrationPlugin)(转载)
- 搭建Struts2开发环境– Struts2应用的配置文件
- Ubuntu 下配置 Eclipse + Tomcat7 开发环境
- python环境搭建和开发工具的配置