admin 管理员组

文章数量: 887021

WIN10-2004+VS2019+WDK驱动开发环境安装及配置

一、定义介绍

  本节介绍如何在Windows10系统(2004版本,操作步骤中有如何查看版本)中安装VS2019及WDK开发包,并进行相应环境配置、修改,使我们可以在WIN10中进行驱动开发。

二、操作步骤

必须先安装VS2019

(一)下载并安装VS2019(包括其组件)

1.下载VS2019

如果不想麻烦(狗头),可以直接网上搜索一下下载。
如果支持正版,可以通过官网VS2019官网下载(找下载链接也得找一会,这里就直接提供了)下载(但可能需要VPN和微软账号)。

2.安装VS2019

大部分下载的VS2019只是个安装器(不然也不能那么小),如图所示

双击运行,自己一直下一步,直到如下图所示界面,勾选上红框部分。
稍微解释一下,C++桌面开发是必须的,不需要多说;Windows 10 SDK(我这里用的是10.0.18352.0)是安装WDK的前提,因为WDK用到了Windows SDK中的东西;MSVC是Microsoft的Visual C/C++编译器。
!!!注意:Windows SDK的版本必须和WDK保持版本平衡,如果用错了版本就没法成果安装WDK。!!!

(二)下载并安装WDK

1.下载WDK

进入官网链接WIN WDK下载下载WDK安装程序,如下下图所示
这里的WDK的版本必须和WIN10的版本一致!!!右击此电脑——属性即可查看到版本信息,如下图
我这里使用的是2004版本的WDK,对应我的SDK版本。

2.安装WDK

双击WDK安装程序,如下图

选择红框部分

继续,直到如下图所示,选择红框部分

点击上图Close会自动弹出VSIX(签名)安装,安装即可

到此,所有安装都已经完成,现在已经可以正常创建驱动项目了。

(三)创建驱动项目并配置

1.打开VS2019创建驱动项目

此时已经可以创建驱动项目,如果不行请仔细对照步骤检查,尤其是WDK和SDK版本对照问题。
接下来就创建新项目,按照如下图所示进行选择。这里注意一下虽然是C++项目,但因为我们建立的是空项目,可以自己建立c文件,所以你自己建立c或c++文件都不影响,但两者代码有些区别,只要后面代码写对就行。

项目名称,项目放哪个文件夹就不再赘述。

创建完成后VS2019显示如下图,只有几个文件夹,没有文件

我们保存的项目路径中多了几个文件,如下图

2.修改配置
(1)创建驱动源文件

先在VS2019右侧source目录下创建一个空的点c文件,命名为“HelloDriver.c”,如下图。其实,驱动大部分都是由c写的(因为Windows操作系统就是C写的,也可以是C++),驱动和别的程序的区别无非就在于①.多了几个库(内核库等)②.编译方式不同。这样去理解驱动你就会发现高深莫测的内核驱动其实也不过如此。

(2)打开项目属性,如图

(3)修改警告等级

在“C/C++——常规”中修改警告等级为“3”;警告视为错误设为“否”,如图

(4)关闭Spectre缓解

在“C/C++——代码生成器”中找到并关闭Spectre缓解,如图所示,设置Spectre Mitigation为“Disable”。Spectre缓解是一种硬件漏洞的软件规避方法,安装了WDK之后会导致Spectre缓解被默认打开了,如果没有安装带Spectre缓解的库,编译就会失败。

(5)设置警告模式

在“Driver Signing——General”中修改“Sign Mode”为“Off”,如图

(6)排除inf文件

在Drvier Files文件夹中找到.inf文件,右击从项目中排除

(7)修改目标版本

根据你要生成的项目用于什么环境,在“Driver Setting——General”中修改目标系统版本“Target OS Version”选项,可以选择Win7、Win8、Win10等等,此外,Debug和配置管理器(就是那个修改X86还是X64项目的下拉栏)根据不同的需求自己定制

到此,一般该配置的东西都已经配置完成了,下面就可以写代码并编译了。

(四)项目测试

1.编写源码

在“HelloDriver.c”中编写驱动程序,这里给出个小例子,初学者照抄就行。

/*
FileName:HelloDriver.c
*/

#include <ntddk.h>

void DriverUnload(PDRIVER_OBJECT pDriverObject);

NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath)
{
	DbgPrint("HelloDriver DriverEntry\n");
	NTSTATUS status = STATUS_SUCCESS;
	pDriverObject->DriverUnload = DriverUnload;

	return status;
}

void DriverUnload(PDRIVER_OBJECT pDriverObject)
{
	DbgPrint("HelloDriver DriverUnload\n");

	return STATUS_SUCCESS;
}

2.编译生成SYS

第一次生成就点击“生成解决方案”
以后修改过代码后就点击“重新生成解决方案”
最下面没报错说明就生成成功了,如图

之后,我们在Debug文件夹下的MyDriver1文件夹下就可以看到.sys文件了,如图

至此,整个环境已经配置完毕,测试案例也已经通过编译并成功生成sys驱动文件。

来自:九七的Windows内核驱动开发
作者原创文章,文章版权归本文作者所有,未经作者同意请勿以任何方式进行复制、转载等盗版操作,请勿用于商业、违法用途!违者自行承担法律责任!

本文标签: 内核 环境 Windows WDK