首先到这个网站里去下载Visual Studio2019,注意目前最新版的WDK仅支持Visual Studio2019,如果要下载2022版本目前推出了预览版,但需要申请下载,所以这里以2019为例。
以前的 WDK 版本和其他下载 - Windows drivers | Microsoft Docs
打开网站后往下拉,找到Visual Studio2019下载,选择一个适用于你的版本,如果个人的话建议Community版本
下载之后双击打开进入安装界面,安装时选择C++的桌面开发要选中,同时“用于Windows 10 SDK)”这个也要选中,WDK基于这些LIB。
如果你电脑上已经有VS了,但是没有装win10SDK,你可以到这个网站下载SDK:Windows SDK - Windows 应用开发
如果网页提示Win11 SDK也没事,可以下载安装到你的Win10上,因为这个是兼容的。
然后在页面往下拉,可以看到WDK,这里有许多版本,你不用在意你的Win10版本,你只需要下载最新的一个就可以了,是向前兼容的。
下载下来以后用管理员权限运行并安装到你的电脑上就可以了,记住安装顺序,先安装好Visual Stuio2019以后在安装WDK,安装WDK时记得记住安装路径,因为等下需要到安装路径下去安装Visual Stuio2019 Tools插件。
安装完成之后打开WDK安装路径,一直往下拉找到“Vsix”目录双击进去
可以看到vs2019,双击进去
然后双击WDK.vsix,注意,执行这一步之前先退出Visual Stuio2019
安装完成之后在打开Vs2019,在新建项目里就可以看到WDK的项目了,后面括号里(KMDF)的意思是Kernel MDF模型,WDK使用的是MDF开发框架模型,所以这里叫MDF。
我们创建一个WDK项目,这里创建的是一个基础内核MDF模型项目,注意这里选择“Kernel Model Driver,Empty”空项目,这样更容易理解,如果创建非空项目的话不适合基础开发人员理解,我们先创建一个空项目编写一个基础的代码,这样方便上手
然后我们在增加一个“driver.c”的源文件,注意这里一定要以.c结尾,只能是C语言文件,在Visual Studio里如果.c结尾的则会用C编译器来编译,这样会节省很大的代码空间,如果是C++的话还会增加额外的一些代码,如普通函数里也会增加try异常代码,以及结构体里会增加构造函数调用之类的代码,这也是为什么我们平常看到的C++程序会比C语言的要大。
另外最重要的一点是Windows内核是C语言编写的,用C编译器编译出来的程序更符号内核程序的入栈方式。
这里文件可以随意命名,以.c结尾就好了,起driver只是windows driver开发中惯用这个名字作为main文件
然后我们包含基础头文件:
这个是ddk的头文件,我们的wdk基于ddk,只不过wdk增加了一些针对电源、PNP的功能,WDK原本就是DDK框架的增强版,只不过现在改名了叫WDK了,WDK包含了DDK框架并增加了一些增强功能,以便能够将过去的一些驱动移植到最新的系统中。
本例程创建一个NTDDK的驱动框架,后续会写文章教大家编写WDK框架的驱动。
#include <ntddk.h>
然后创建一个DriverEntry函数,这个函数就相当于main函数,原型以及返回值都有要求的,这个函数会在驱动被调用时执行。
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath){
return STATUS_SUCCESS;
}
然后直接build
build可能会出现这个问题:
这个是Spectre缓解库的问题,MS官方推出的一个库,默认在驱动开发时会开启,但是需要你电脑上安装对应的VS Spectre库,这个库的作用是用来保证硬件开发时的漏洞问题,它对应的是C++库,你可以把它理解为C++的增强安全库,它里面的函数对指针与堆栈溢出代码做了很好的防范,使用这个库可以保证你的代码不会出现内存溢出或指针非法引用。
解决这个问题有两个方案,第一是到官网下载对应的Spectre缓解库,但是比较麻烦,第二是在项目中禁用它,这里我们先禁用它:
build之后就可以在文件夹下看到生成的sys文件以及inf文件:文章来源:https://www.toymoban.com/news/detail-445510.html
文章来源地址https://www.toymoban.com/news/detail-445510.html
到了这里,关于Windows Driver开发_安装与配置环境的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!