VS2015+WDK10在不同环境下的驱动配置

原文链接 Windows驱动开发:环境搭建(1)

目前最新的WDK版本为WDK10,最新的IDE为VS2017,但目前的VS2017并不支持驱动开发,根据MS的路线图,新的开发工具还在研发中,所以目前还是用VS2015 Update3 + SDK + WDK10。

学习一门开发技术,首先是搭建环境,这样我们才能直观地感受这门技术,这远比书本上看来的直观。下面,依照目前当前的实际情况,说一下驱动开发环境。

Windows平台

Windows平台以Vista、Windows 7 为分水岭。自Vista开始有了UAC,所以一般的应用开发就Vista为界限;对WDK10来说,因为WDK10支持的最早版本就是Windows7,所以对目前我们进行驱动开发来说,就以Windows 7 位界限。

目前还能支持XP的DDK版本是DDK 7.1,这是最后一个支持XP的版本。

我们开发驱动,肯定至少要支持XP – win10,这也是几乎所有驱动厂商都要支持的。根据我们上面所说,那么我们就需要以下几种组合:

WDK10  —— 针对Windows 7 到 Windows 10的版本

DDK7.1 ——针对的是XP及以后版本

直接看,我们用DDK7.1开发就可以了,但针对新平台的许多特性,DDK7.1并不具备,因此目前阶段我们要搭建以下几种开发、测试环境:

  • VS2015 + WDK10 + 虚拟机WIN10 (32+64)  : 组合一
  • VS2015 + WDK10 + 虚拟机WIN7(32+64)      : 组合二
  • VS2015 + WDK10 + 虚拟机XP                                : 组合三
  • VS2015 + DDK7.1 + 虚拟机WIN10(32+64)    : 组合四
  • VS2015 + DDK7.1 + 虚拟机WIN7(32+64)       : 组合五
  • VS2015 + DDK7.1 + 虚拟机XP                                : 组合六

如果有些环境无法用VS2015直接调试,那么可以考虑用windbg调试。

环境搭建

组合一:

1.创建一个Windows 10 Enterprise版本,因为我本机也是装了这个版本,要与虚拟机一致;

2.增加一个串口,一般我是删除掉打印机占用的COM1,让新增加的串口号为1;

3.对虚拟机进行设置

设置虚拟机系统为内核可调试状态:

bcdedit /set {default} DEBUG YES

bcdedit /set TESTSIGNING ON

设置虚拟机串口调试

bcdedit /debug on

bcdedit /dbgsettings serial debugport:1 baudrate:115200

在WDK10安装目录下(我的是C:\Program files(x86)\windows kits\10)找到文件WDK Test Target Setup x86-x86_en-us.msi和WDK Test Target Setup x64-x64_en-us.msi,拷贝到虚拟机中进行安装。

4.对VS2015进行设置



走到这,发现Network Hostname没有让我们输入的地方啊,还有一个红框把Provisioning Options框起来,是有什么特别的意图吗?到了这部,在网上搜了半天都没搜出来,所以重装了两次VS+WDK,还是没法解决,后面也忘了怎么想着就拉伸了一下,结果你猜怎么着?就下面这副鸟样了


我只能说,MS你家真不厚道啊,你家产品经理有脑子吗?

言归正传,继续往下走,这里Provisioning Options有两个选项:

Provision device and choose debugger settings和Manually configure debuggers and do not provision,前者是在target machine安装和配置组件,以允许从VS直接分发驱动,运行测试。默认的debug设置也会被设置到目标机器上。相比较,后者就是在VS里设置debugger settings,而target machine上的设置需要我们像第三步那样手动设置。

如果我们选择了前者,那么其实第三步可以省略,这时候target machine上会创建一个新的用户WDKRemoteDebugger,我们的调试,会在这个用户下进行。

好了,配置已经做完了,下面就是正式调试。

在组合一里面,其实也有三种情形。

(1)WDM驱动调试

(2).KMDF驱动调试

(3).UMDF驱动调试

因为目前正在看《Windows内核安全与驱动开发》,开头就是WDM驱动的例子,所以此处我们暂且放下,但后面一定会讲到,而且注意,KMDF和UMDF的调试也还是有很多小技巧以及注意的地方。

WDM驱动是以服务的方式运行,因此,我们需要有一个驱动加载工具,这方面的工具很多,有InstSrv,DriverStudio,还有书上推荐的srvinstw,但很不幸好像都不支持64位驱动加载,所以最后我们还要找一个64位WDM驱动加载工具,实在不行,只能自己写一个了。

VS在Debug->Attach to Process下


直接附加到Kernel进程里,待系统启动后,我们break一下,设置断点,然后再continue,这样断点就能生效了(其实不break,断点也能生效,但有时候就不能生效,是挺奇怪的,我说的不能生效是在调试KMDF的时候)。

把生成的驱动拷贝到target machine,我用的是InstSrv加载工具,先安装驱动,再启动,点击启动的时候,就进入到VS中的DriverEntry中的断点了。注意:不需要拷贝符号表文件,本身就是VS加载调试,我不理解为什么有的文章里写一定要把PDB文件一块拷贝进去。

组合二:

这个组合可把我坑苦了。。。重装了N遍虚拟机,实在找不出原因了,我还装了英文版,英文版不行,我还更新了700多M的补丁,到头来我也不知道自己哪儿错了,只知道一条路不通,另外一条路可以,在搜索引擎里找了好久,终于找到一个靠谱的blog,其它的都不靠谱,按理说搞驱动开发的不少啊,可能写blog的少吧。

1和2,装虚拟机和增加串口就不说了,跟上面一样;

3.以管理员身份,在虚拟机cmd下运行

    bcdedit /debug on

    bcdedit /dbgsettings serial debugport:n baudrate:115200
    这里的n是增加的串口号,我的是1

3.最重要的一步来了,在Provisioning Options,如果选择自动方式,此时确实会创建一个WDKRemoteDebugger用户,但一旦重启就蓝屏,进入保护模式也是蓝屏,这根本没法玩儿的节奏啊!!!!坑爹的MS,我又要诅咒你了,在网上找不到一条关于蓝屏的情形,根本没有解决方案,于是我忙活了一下午+一晚上。到了这里我要插一句话,以后搜索的发展方向也要朝着人工智能方向发展,像这种情形,我能用什么语言做关键字搜索? VS2015 + WDK10 + WMWARE + WIN7 + BlueScreen?总有许多我们可能无法用语言描述的问题,很可能已经有人解决了问题,或者说有人能解决这个问题,但两者无法联系在一起,这时候搜索该怎么做?
言归正传,那就试试Manual方式吧,不需要在target machine上安装什么,很快就可以了。
如果下图中的状态变为Configured for driver testing,那么就可用了。

这时候调试,跟之前一样,没有区别。知道现在,我也完全想不通,为什么第一种方式会出错?
跟上面一样,这里也有WDM KMDF UMDF的三种情形,不过放在后面处理。
好了,今天就先到这,下期再见。
 附:
经过证明,Provisioning 选择完全自动化的方式对Windows7系统并不适用,好吧,那就安心了。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
VS2015+WDK10是指在Windows 10系统下搭建驱动开发环境的组合。首先需要安装Visual Studio 2015 Enterprise,然后再安装WDK 10。注意,WDK10必须在安装VS2015之后进行安装。安装完成后,可以在VS2015的界面菜单上看到driver菜单,从而可以进行驱动开发。\[1\] 在搭建环境时,可以选择下载Community版本的VS2015,因为这个版本是免费且功能齐全的。安装包的大小大约为7G左右。安装完成后,需要选择安装Visual C++和Windows 10 SDK。\[3\] 通过搭建VS2015+WDK10的环境,可以在Windows 10系统上直接新建驱动项目并编译通过,然后在Win7及以上的系统上运行。这样可以避免自己制作模板等繁琐的步骤。\[2\] #### 引用[.reference_title] - *1* [Win10下VS2015(WDK10)驱动开发环境配置](https://blog.csdn.net/liuyez123/article/details/50857621)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [VS2015+WDK10+Win10 Win7以上系统驱动发开环境搭建](https://blog.csdn.net/wlanye/article/details/94962999)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [VS2015 + WDK10](https://blog.csdn.net/qq_25867649/article/details/54598506)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值