Windows Driver Kit 是一种完全集成的驱动程序开发工具包,它包含 WinDDK 用于测试 Windows 驱动器的可靠性和稳定性,本次实验使用的是 WDK8.1 驱动开发工具包,该工具包支持 Windows 7到 Windows 10 系统的驱动开发。

VS2013+WDK8.1 驱动开发环境的搭建我研究了很长时间今天总算搭建出来了,而且中途没有错误,这里就把搭建过程分享出来,首先介绍一下我的实验环境:

宿主操作系统:Windows 10 LTSC 企业版

驱动测试环境:Windows 7 x86 企业版

编译器的版本:Visual Studio Express 2013

驱动框架版本:Windows Driver Kit 8.1 (精简)

内核调试工具:WinDBG 10

驱动工具打包链接:https://pan.baidu.com/s/18VIXKdFdfu7ZuKOql7Z_Iw 提取码:9se4

配置VS+WDK 驱动开发环境

首先你需要先安装好Visual Studio 2013的开发环境,然后再安装Windows Driver Kit 8.1的驱动开发工具包,这个工具包安装好以后1.5G左右,不过我已经把这个安装包中的关键库文件提取出来了,提取出的文件只有80MB,直接将提取好的WinDDK.zip解压缩到指定文件中,并配置环境即可使用,省去了安装WDK的麻烦。

1.这里直接把我提取的WinDDK.zip文件解压缩到C盘根目录下,然后打开Visual Studio 开发工具,按下【Ctrl+Shift+N】新建空项目并输入项目名称为【MyDDK】即可。

2.依次选择解决方案视图 -> 源文件 -> 添加新建项,或者直接按下【Ctrl + Shift + A】快捷打开菜单,并创建【main.cpp】文件。

3.接着我们需要修改一下配置管理器,添加自定义配置管理,选择【生成】->【配置管理器】->【新建】,此处我们命名为【MyDDK】即可。

4.接着修改一下配置属性中的常规属性,点击菜单栏中的调试,选择【MyDDK属性】->【配置】->【常规】 -> 修改以下几处。

5.配置可执行文件路径与导入库路径,这里我们选择 【配置属性】 -> 【VC++目录】依次将如下信息填入配置项,如果需要编译x64位驱动只需要将x86改为x64即可,此处以x86为例。

可执行文件:
C:\WinDDK\bin
C:\WinDDK\bin\x86 包含目录:
C:\WinDDK\Include\km
C:\WinDDK\Include\um
C:\WinDDK\Include\winrt
C:\WinDDK\Include\shared 引用目录+库目录
C:\WinDDK\Lib\win7\km\x86

6.配置【C/C++优化选项】配置属性 -> C/C++ -> 所有选项 -> 依次修改下方几个关键处,如果你需要编译X64驱动需将调用约定改为【__fastcall (/Gr)】然后将预处理器定义中的【X86_改为_AMD64】即可编译64位驱动了,此处以X86配置为例。

安全检查:禁用安全检查 (/GS-)
将警告视为错误:是 (/WX)
警告等级:等级 3 (/W3)
启用C++异常:否
调用约定:__stdcall (/Gz)
优化:已禁用 (/Od)
运行库:多线程调试 (/MTd) 预处理器定义: _X86_;_DDK_;_WIN32_WINNT=0x0501;WINVER=0x0501;_NDEBUG;DBG=0;%(PreprocessorDefinitions)

7.接着需要【配置连接器】选项,选择连接器 -> 所有选项 -> 依次修改下方几个关键处。

附加选项:/IGNORE:4078 /safeseh:no
附加依赖项:ntoskrnl.lib;ndis.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib
固定基址:此处需要为空
忽略所有默认库:是 (/NODEFAULTLIB)
启用增量链接:否 (/INCREMENTAL:NO)
驱动程序:驱动程序 (/Driver)
入口点:DriverEntry
生成清单:否 (/MANIFEST:NO)
生成调试信息:是 (/DEBUG)
生成映射文件:是 (/MAP)
数据执行保护:是 (/NXCOMPAT)
随机基址:此处需要清空
子系统:本机 (/SUBSYSTEM:NATIVE)

8.上方的配置已经基本完成了,接着我们编写一段驱动初始化代码,然后按下【F7】即可完成驱动的编译。

#include <ntddk.h>

VOID UnDriver(PDRIVER_OBJECT driver)
{
DbgPrint(("Uninstall Driver Is OK \n"));
} NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath)
{
DbgPrint(("hello lyshark \n"));
Driver->DriverUnload = UnDriver;
return STATUS_SUCCESS;
}

9.最后我们生成一个驱动开发模板,依次选择【文件】->【导出模板】->【项目模板】->【下一步】->【完成】即可完成模板的导出。

此时关闭VS工具,再次打开,就能直接使用我们的模板来开发驱动了,不需要每次都配置。

配置内核双机调试

WinDBG 是Microsoft公司免费调试器调试集合中的GUI的调试器,支持Source和Assembly两种模式的调试,Windbg不仅可以调试应用程序,还可以进行内核调试,结合Microsoft的Symbol Server 可以获取系统符号文件,便于应用程序和内核的调试,接下来我们将继续完成WinDBG双机调试的配置。

1.首先需要安装VMWare虚拟机,并自行安装好Windows7系统,然后在虚拟机关闭状态下添加一个管道虚拟串口,此处需要删除打印机,否则串口与打印机之间冲突。

操作步骤:编辑虚拟机设置->添加->串行端口->完成

参数配置:使用命名管道->\.\pipe\com_1->该端是服务器另一端是应用程序->轮询时主动放弃CPU

2.开启虚拟机中的Windows7系统,然后以管理员身份运行CMD命令行,连续执行下方的三条命令,依次建立启动项,并激活调试模式。

Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。 C:\Users\Administrator>bcdedit /copy {current} /d "Windwos7"
已将该项成功复制到 {2372b00a-f22b-11e9-be45-000c2971b6bf}。 C:\Users\Administrator>bcdedit /debug ON
操作成功完成。 C:\Users\Administrator>bcdedit /bootdebug ON
操作成功完成。 C:\Users\Administrator>bcdedit /timeout 10
操作成功完成。 C:\Users\Administrator>bcdedit /dbgsettings

3.默认情况下Win7下的DbgView不显示内核调试信息,为了方便测试,我们需要修改一下注册表,新建一个run.reg文件,然后运行并注册。

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter]
"DEFAULT"=dword:0000000f

4.配置完成后,重新启动系统,在开机的时候选择Windows7 [启用调试程序]则系统会黑屏,说明已经正常进入调试模式了。

5.接着回到物理机上面,我们在WinDBG所在路径下创建一个Bat文件,这里就叫debug.bat 然后写入以下命令保存,直接运行这个脚本即可。

windbg.exe -b -k com:port=\\.\pipe\com_1,baud=115200,pipe

为了方便调试,可以通过【File菜单】加载符号文件,也可以按下【Ctrl+S】并输入命令 srvc:\symbolshttp://msdl.microsoft.com/download/symbols 自动下载符号保存到C盘下。

到此为止,我们的内核调试环境已经配置并能够独立工作了,接着我们编写一个简单的驱动程序,为了能让程序段下来方便调试我们在程序的开始位置加上__asm{ int 3 } 断点然后让程序执行后自动断下,最终代码如下:

#include <ntddk.h>

VOID UnDriver(PDRIVER_OBJECT driver)
{
DbgPrint(("Uninstall Driver Is OK \n"));
} NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver,PUNICODE_STRING RegistryPath)
{
__asm{ int 3 } // 内联汇编添加 int 3 断点
DbgPrint(("hello lyshark \n"));
Driver->DriverUnload = UnDriver;
return STATUS_SUCCESS;
}

6.现在我们启动Windows7系统,直接输入g命令即可让Win7跑起来,手动添加符号文件。

按下 Ctrl +S 加入以下符号文件,最后的路径是你驱动编译所在路径。

srv*c:\symbolshttp://msdl.microsoft.com/download/symbols ; C:\MyDDK\MyDDK\

当Windows系统加载完成以后,拖入我们的驱动文件wdk.sys,并通过驱动加载工具加载运行,此时Windows系统会卡死,回到WinDBG中发现已经可以进行源码调试了哈。

原创作品,转载请加出处,您添加出处是我创作的动力!

VS2013+WDK8.1 驱动开发环境配置的更多相关文章

  1. Win8.1+VS2013+WDK8.1+VirtualBox or VMware 驱动开发环境配置

    https://blog.csdn.net/charlessimonyi/article/details/50904956 Win8.1+VS2013+WDK8.1+VirtualBox or VMw ...

  2. VS2013的x86汇编语言开发环境配置

    转载:https://blog.csdn.net/infoworld/article/details/45085415 转载:https://blog.csdn.net/u014792304/arti ...

  3. visual studio 2010配置驱动开发环境

    visual studio 2010 配置驱动开发环境 ** 工具/材料 VS2010.WDK开发包 **  配置过程 以下将讲述VS2010驱动开发环境的配置过程,至于必要软件的安装过程这里不再赘述 ...

  4. 75.VS2013和opencv3.1.0开发环境配置

    首先要做的就是 开发环境配置,具体过程如下: Step 1:OpenCV环境变量配置 我的电脑--->属性--->高级系统设置--->高级--->环境变量--->系统变量 ...

  5. [内核编程] visual studio 2010配置驱动开发环境

    visual studio 2010 配置驱动开发环境 ** 工具/材料 VS2010.WDK开发包 **  配置过程 以下将讲述VS2010驱动开发环境的配置过程,至于必要软件的安装过程这里不再赘述 ...

  6. XMPP开发环境配置

    首先配置XMPP开发环境配置需要的软件 先安装xampp-osx-1.8.3-5-installer.dmg 安装成功后launchpad里会多出一个XAMPP(其他),点开里面的manager-os ...

  7. Linux设备驱动开发环境的搭建(转)

    经过两周的摸索,终于对Linux设备驱动开发有了个初步的认识,下面对Linux设备驱动开发环境的搭建做个小结,以方便自己以后查询,同时也能给同道的初学者一点帮助. 刚接触Linux设备驱动时,初学者往 ...

  8. Kinect for Windows SDK开发入门(一):开发环境配置

    [译]Kinect for Windows SDK开发入门(一):开发环境配置 前几天无意中看到微软发布了Kinect for windows sensor,进去看了一下Kinect应用的例子,发现K ...

  9. Unity3D Android手机开发环境配置

    Unity3D Android手机开发环境配置 Date:2014-01-01 07:09 1.配置eclipse环境:首先在官网下载安装包:http://developer.android.com/ ...

随机推荐

  1. Java核心复习——CompletableFuture

    介绍 JDK1.8引入CompletableFuture类. 使用方法 public class CompletableFutureTest { private static ExecutorServ ...

  2. mysql存储引擎介绍,索引

    区别: MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等 ...

  3. apache配置https重定向

    apache配置https重定向 一.总结 一句话总结: 网上找不到答案的原因是因为没有精准的描述问题,没有把问题描述清楚:尽量把关键词描述清楚 1.apache将80端口重定向443的具体步骤(在 ...

  4. 浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景

    浅谈Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景   Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁 ...

  5. SpringCloud学习成长之路二 服务客户端(rest+ribbon)

    在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的. Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是f ...

  6. PAT 甲级 1055 The World's Richest (25 分)(简单题,要用printf和scanf,否则超时,string 的输入输出要注意)

    1055 The World's Richest (25 分)   Forbes magazine publishes every year its list of billionaires base ...

  7. Laravel 项目开发环境配置

    1.首先安装Laravel 依赖管理包工具 Composer (前提是本地装好了PHP  php -v) php -r "copy('https://install.phpcomposer. ...

  8. Win10使用Tex Live和VS Code和Latex Workshop插件编写Latex文档(未完成版本)

    首先取Tex Live官网下载安装包:https://www.tug.org/texlive/acquire-netinstall.html 我下载的是 http://mirror.ctan.org/ ...

  9. Node.js ORM框架Sequelize使用示例

    示例代码: const Sequelize = require('sequelize'); const sequelize = new Sequelize('database', 'username' ...

  10. 前端表格插件datatables

    下载datatables datatables官网:https://www.datatables.net/ datatables下载地址:https://www.datatables.net/down ...