驱动篇——开发环境配置

2021年11月22日 阅读数:2
这篇文章主要向大家介绍驱动篇——开发环境配置,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

写在前面

  此系列是本人一个字一个字码出来的,包括示例和实验截图。因为系统内核的复杂性,故可能有错误或者不全面的地方,若有错误,欢迎批评指正,本教程将会长期更新。 若有好的建议,欢迎反馈。码字不易,若是本篇文章有帮助你的,若有闲钱,能够打赏支持个人创做。如想转载,请把个人转载信息附在文章后面,并声明个人我的信息和本人博客地址便可,但必须事先通知我html

你若是是从中间插过来看的,请仔细阅读 羽夏看Win系统内核——简述 ,方便学习本教程。编程

  看此教程以前,问一个问题,你明确学驱动的目的了吗? 没有的话就不要继续了,请从新学习 羽夏看Win系统内核——驱动篇 里面的内容。windows


🔒 华丽的分割线 🔒函数


开发环境配置

  Microsoft官方提供了指导,点击 该连接 转到官方指导页面。
  怎么装VSWindows 11 SDK我就不赘述了。注意,若是你没有装Windows 11 SDK,直接安装Windows 11 WDK,驱动的关键头文件你会没有。
  接下来讲一下怎么装Windows 11 WDK,下载好后运行,你会看到以下状况:工具

  选择好安装目录,点击继续,而后会到下图所示状况,选中否,它会收集你的一些信息:学习

  最后按照正常操做就好了,最后会弹出安装插件的窗体(忘了截图了,和正常安装VS插件同样的窗体),点击Modify。这个插件会提供一些编写驱动的模板,这东西相当重要,帮咱们减小了大量的配置人力。测试

  安装好以后,咱们进行一个测试。开启VS,选择新建项目,若是编写在XP下面的驱动的话,注意选择Empty WDM Driver,以下图所示:插件

  后面就像正常新建项目同样起个名字新建就行,你就会获得一个新的空项目。而后添加一个源文件,以下图所示:调试

  为何要用C,而不用C++呢?C++虽然更增强大,提供类的功能。但C更加简单,对于咱们来讲就足够了,除非你用其开发大型驱动程序。
  新建完毕后,咱们用下面的代码:code

#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开发驱动的,有不少APIXP没有的。请到 羽夏看Win系统内核——简述 下载WDK帮助文档。而后下载成功解压,并运行Docs.msi安装程序进行安装便可。最后的帮助文档效果以下图所示:

  综上,环境就配置完毕了,本文结束。

下一篇

  驱动篇——内核编程基础