Win10下VS2015(WDK10)驱动开发环境配置

Win10下VS2015(WDK10)驱动开发环境配置
1、概述
微软在”WDK7600“以后就不再提供独⽴的内核驱动开发包了,⽽是必须⾸先安装微软集成开发环境VisualStudio,然后再从微软官⽹下载集成的WDK开发包、或者离线安装包,但是安装后Visual Studio就集驱动程序开发,编译,安装,部署和调试于⼀⾝,使得Windows驱动程序开发会变得更容易。对于Windows 10和Visual Studio2015驱动开发WDK环境变量的配置,与其它版本的Windows和WDK环境的配置有很⼤不同。本⼈也是苦苦探索了近⼀周的时间才配好。
2、    WDF驱动模型
设备驱动程序是硬件设备连接到计算机系统的软件接⼝,任何设备都必须有相应的驱动程序才能在计算机系统上正常⼯作。设备驱动程序的优劣直接关系到整个系统的性能和稳定性,因此,设计和开发稳定⾼效的驱动程序具有重要意义。
早期的Windows 95/98的设备驱动是VxD(Virtual DeviceDriver),其中x表⽰某⼀类设备。从Windows 2000开始,开发驱动必以WDM(Windows Driver Model)为基础的,但是,如果使⽤DDK来开发WDM,其开发难度之⼤,根本不能奢望像⽤户模式应⽤程序开发那样容易,因此,⼀般⽤户都是使⽤W
inDriver、DriverStudio之类的第三⽅⼯具。为改善这种局⾯,从Vista开始,微软推出了新的驱动程序开发环境WDF(Windows Driver Foundation )。
WDF(WindowsDriver Foundation)是微软提出的下⼀代全新的驱动程序模型,它是在WDM(windowsDriver Model)的基础上发展⽽来的,⽀持⾯向对象、事件驱动的驱动程序开发,提供了⽐WDM更⾼层次抽象的⾼度灵活、可扩展、可诊断的驱动程序框架。WDF框架管理了⼤多数与操作系统相关的交互,实现了公共的驱动程序功能(如电源管理、PnP⽀持),隔离了设备驱动程序与操作系统内核,降低了驱动程序对内核的影响。
WDF提供了两个框架:KMDF(内核模式驱动程序框架)和UMDF(⽤户模式驱动程序框架)。
1、内核模式驱动程序 KMDF(Kernel-Mode DriverFramework):
这类驱动程序作为内核模式操作系统组件的⼀部分执⾏,它们管理I/O、即插即⽤、内存、进程和线程、安全等。
内核模式驱动程序通常为分层结构。KMDF是Windows系统底层驱动,⽂件名为:*.SYS。关于KMDF更多的内容,可参阅 MSDN中“Getting Started with Kernel-ModeDriver Framework ”。grf
2、⽤户模式驱动程序 UMDF(User-Mode DriverFramework):
这类驱动程序通常提供 Win32 应⽤程序与内核模式驱动程序或其他操作系统组件之间的接⼝。⽤户模式驱动程序⽀持基于协议或基于串⾏总线(如摄像机和便携⾳乐播放器)的设备。UMDF是⽤户层驱动,⽂件名为:*.DLL。
关于KMDF更多的内容,可参阅 MSDN中“Introduction to UMDF“。
⽆论内核模式的驱动程序或者⽤户模式的驱动程序,都使⽤同⼀环境进⾏构建,这⼀环境称为WDK;都采⽤同⼀套对象模型构建,采⽤同⼀个基础承载,这个基础就是WDF。由于WDF驱动模型提供了⾯向对象和事件驱动的驱动程序开发框架,⼤⼤降低了开发难度。从现在开始,掌握Windows设备驱动程序的开发⼈员,由过去的“专业”⼈⼠,将变为“普通”⼤众。因此,像WinDriver、DriverStudio之类的第三⽅⼯具也随之退出历史舞台。更重要的,也是微软反复炫耀的是封装了中的某些共同⾏为:例如即插即⽤和电源管理就属于这种共同⾏为。因为⼤多数驱动程序中都需要处理即插即⽤和电源管理问题,据说这⼤概要上千⾏的代码,况且,没有相当⽔平还不⼀定能处理好。为了⼀劳永逸,WDF⼲脆将即插即⽤和电源管理封装了进了对象之内,⼀举成了对象的缺省(默认)⾏为。WDF将驱动程序与操作系统内核之间进⾏了分离,驱动程序与操作系统交互⼯作交给框架内封装的⽅法(函数)完成,这样驱动开发者只需专注处理硬件的⾏为即可。这不仅避免了顾此失彼两⾯不周的弊端,也由于双⽅的分离,对操作系统内的某些改动,硬件制造商配套的开发都有莫⼤的好处。
3、⽤户模式和内核模式
运⾏ Windows 的计算机中的处理器有两个不同模式:“⽤户模式”和“内核模式”。根据处理器上运⾏的代码的类型,处理器在两个模式之间切换。应⽤程序在⽤户模式下运⾏,核⼼操作系统组件在内核模式下运⾏。多个驱动程序在内核模式下运⾏时,某些驱动程序可能在⽤户模式下运⾏。
当启动⽤户模式的应⽤程序时,Windows 会为该应⽤程序创建“进程”。进程为应⽤程序提供专⽤的“虚拟地址空间”和专⽤的“句柄表格”。由于应⽤程序的虚拟地址空间为专⽤空间,⼀个应⽤程序⽆法更改属于其他应⽤程序的数据。每个应⽤程序都孤⽴运⾏,如果⼀个应⽤程序损坏,则损坏会限制到该应⽤程序。其他应⽤程序和操作系统不会受该损坏的影响。
⽤户模式应⽤程序的虚拟地址空间除了为专⽤空间以外,还会受到限制。在⽤户模式下运⾏的处理器⽆法访问为该操作系统保留的虚拟地址。限制⽤户模式应⽤程序的虚拟地址空间可防⽌应⽤程序更改并且可能损坏关键的操作系统数据。
在内核模式下运⾏的所有代码都共享单个虚拟地址空间。这表⽰内核模式驱动程序未从其他驱动程序和操作系统⾃⾝独⽴开来。如果内核模式驱动程序意外写⼊错误的虚拟地址,则属于操作系统或其他驱动程序的数据可能会受到损坏。如果内核模式驱动程序损坏,则整个操作系统会损坏。
此图说明了⽤户模式组件与内核模式组件之间的通信。
5、开发调试环境配置
5.1    ⼯具及平台环境
平台:Windows 10操作系统
开发环境:Visual Studio 2015 Enterprise 和Windows WDK、Windows SDK姜可BYJUNNEY
调试环境:Oracle VM VirtualBox 5.0.14虚拟机
5.2    ⽅法/步骤
5.2.1    设置主计算机和测试计算机
设置⽬标或测试计算机是配置计算机以便进⾏⾃动驱动程序部署、测试和调试的过程。⼀个测试和调试环境具有两台计算机:主计算机和⽬标计算机。⽬标计算机也称为“测试计算机”。使⽤主机上的 Vsual Studio开发和构建驱动程序。调试程序在主计算机上运⾏(可以使⽤ Visual Studio ⽤户界⾯或WinDbg调试⼯具),当测试和调试驱动程序时,驱动程序在⽬标计算机上运⾏。
1      安装设置主计算机
本次搭建环境主计算机操作系统使⽤win10,⾸先安装Visual Studio 2015 Enterprise,然后安装Wdk 10。注
意:WDK10⼀定要在vs2015后⾯安装,安装完后,启动vs2015在界⾯菜单上会出现driver菜单,如下图。另外,⼀
般VisualStudio 2015 Enterprise是已经内带windows SDK,但是如果不是和安装的WDK⼀致的版本,建议在单独安
装windows SDK 10,使得WDK和SDK版本⼀致。
2      安装设置⽬标计算机
本次测试⽬标计算机采⽤Oracle VM VirtualBox 5.0.14虚拟机。⾸先在主计算机上安装Oracle VM VirtualBox5.0.14虚拟机,然后在虚拟机上安装win10操作系统。
3      联通主计算机和⽬标计算机
主计算机和⽬标计算机必须能够彼此按名称执⾏ ping 操作。如果两台计算机已加⼊到同⼀⼯作组或同⼀⽹络域,则此操作可能更容易。
验证主机和⽬标计算机可以彼此执⾏ ping 操作。打开命令提⽰符窗⼝,并输⼊ ping 192.168.X.X(ip_adress)。
如果主计算机和⽬标计算机已加⼊到⼀个⼯作组,但它们位于不同的⼦⽹上,你可能必须调整某些防⽕墙设置,以便主计算机和⽬标计算机可以通信。请按照下列步骤进⾏操作:
两种⽅法(选⼀即可):
⽅法⼀:
在⽬标计算机上的“控制⾯板”中,转到“⽹络和 Internet”>“⽹络共享中⼼”。注意你的活动⽹络。它可能是“公共⽹
络”、“私有⽹络”或“域”。
在⽬标计算机上的“控制⾯板”中,转到“系统和安全”>“Windows 防⽕墙”>“⾼级设置”>“⼊站规则”。
在⼊站规则列表中,查⽤于活动⽹络的所有⽹络发现规则。(例如,查所有“配置⽂件”为“专⽤”的⽹络发现规则。)双击每个规则,然后打开“作⽤域”选项卡。在“远程 IP 地址”下,选择“任何 IP 地址”。
在⼊站规则列表中,查⽤于活动⽹络的所有“⽂件和打印机共享”规则。对于每个规则,双击该规则,将打开“作⽤域”选项卡。在“远程 IP 地址”下,选择“任何 IP 地址”。
⽅法⼆:
“控制⾯板”->“系统和安全”->“Windows防⽕墙”->"启动或关闭Windows防⽕墙"->"关闭Windows防⽕墙"
4      ⽬标计算机允许内核调试
1)    在测试⽬标计算机上⽤系统管理员账户打开CMD命令窗⼝,输⼊下⾯命令:
C:\> bcdedit /set {default} DEBUG YES
C:\> bcdedit /set TESTSIGNING ON
B.  在测试⽬标计算机上设置串⼝调试
在测试⽬标计算机上⽤系统管理员账户打开CMD命令窗⼝,输⼊下⾯命令:
C:\> bcdedit /debug on
C:\> bcdedit /dbgsettings serial debugport:1 baudrate:115200
其中debugport:1,表⽰选择串⼝com1。
然后重启操作系统,在测试⽬标计算机上打开CMD命令窗⼝,输⼊下⾯命令,就可以看到刚才配置的参数:C:\> bcdedit / bcdedit /dbgsettings
C.  在主计算机启动WinDbg调试程序
在主计算机上打开CMD命令窗⼝,进⼊到WinDbg程序的⽂件夹,⼀般在如下的路径:
C:\>cd C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
C:\> windbg -k com:pipe,port=\\.\pipe\vmbox,resets=0,reconnect
Windbg程序正常运⾏,效果如下,说明配置正确,可以通过串⼝调试驱动程序了。
5.2.2.2      设置测试⽬标计算机为⽹络调试⽅式
管仲相齐
A.    在测试⽬标计算机上设置⽹络调试
在测试⽬标计算机上⽤系统管理员账户打开CMD命令窗⼝,输⼊下⾯命令:
C:\> bcdedit /debug on
C:\> bcdedit /dbgsettings net hostip:192.168.12.109 port:50000 key:1.2.3.4
其中hostip:192.168.12.109,表⽰主计算机ip地址,port:50000制定通讯端⼝,key参数指定通讯使⽤的加密密钥key。然后重启操作系统,在测试⽬标计算机上打开CMD命令窗⼝,输⼊下⾯命令,就可以看到刚才配置的参数:
C:\> bcdedit / bcdedit /dbgsettings
B.  在主计算机启动WinDbg调试程序
在主计算机上打开CMD命令窗⼝,进⼊到WinDbg程序的⽂件夹,⼀般在如下的路径:
C:\>cd C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
C:\> WinDbg –k net:port=50000,key=1.2.3.4
Windbg程序正常运⾏,效果如下,说明配置正确,可以通过串⼝调试驱动程序了。
白帆文学社
5.2.3    设置Visual Studio 2015调试⽅式黄宗隆
Visual Studio 2015本⾝集驱动程序开发,编译,安装,部署和调试于⼀⾝,使得Windows驱动程序开发会变得更容易。Visual Studio 2015作为调试、部署界⾯和使⽤WinDbg作为调试界⾯在配置上有⼀些不同。
5.2.3.1      设置测试⽬标计算机为串⼝调试⽅式
A.    在虚拟机上设置串⼝
⾸先关闭虚拟机上的操作系统,在虚拟机上设置。对于普通的VirtualBox中的虚拟机,默认配置情况下,是没有开启对应的串⼝的,其配置参看上⼀节的串⼝设置。
B.  在测试⽬标计算机上设置串⼝调试
在测试⽬标计算机上⽤系统管理员账户打开CMD命令窗⼝,输⼊下⾯命令:
C:\> bcdedit /debug on
C:\> bcdedit /dbgsettings serial debugport:1 baudrate:115200
其中debugport:1,表⽰选择串⼝com1。
然后重启操作系统,在测试⽬标计算机上打开CMD命令窗⼝,输⼊下⾯命令,就可以看到刚才配置的参数:C:\> bcdedit / bcdedit /dbgsettings
C.  设置测试⽬标计算机为WDKRemoteUser
在⽬标计算机上,运⾏与⽬标计算机平台匹配的 WDK 测试⽬标安装程序 MSI。可以在安装过WDK10的主计算机的WDK10安装⽬录下到该 MSI。
例如:C:\Program Files (x86)\WindowsKits\10\Remote\x64\WDK Test Target Setup x64-x64_en-us.msi
注意:如果该程序没有安装,则下⼀步再vs2015上⾯做的配置就不能成功,我就在这⼀步上被卡住很久,⼀直不到原因。
D.  在主计算机设置Visual Studio 2015程序
在主计算机上,在 Visual Studio 的“Driver”菜单中,选择“Test”>“Configure Deivce”。
单击“Add New Device”。
这⾥需要注意:如果vs2015的版本是vs2015 Update 1版本,这时候会出现⼀个错误提⽰窗⼝,不能进⾏相应的设置,提⽰如下:
这是可以从驱动程序的项⽬点右键—》选择属性菜单—》选择调试选项—》在右边要启动的调试器上选择Debugging Tools for windows – Kernel Debugger—》在Remote Computer Name上点击配置,就会出现配置窗⼝,界⾯如下:点击Add New Devide添加提个测试主机,在出现的界⾯上填写测试⽬标主机的显⽰名称,设备类型(计算机设备或移动设备),测试⽬标主机的主机名(我测试填IP地址也可以),在Provision Options选项中建议选择第⼀项Provision Deviceand choose debugger setting”,这样vs2015就能就⾏⾃动部署测试的驱动程序,但是设置的时候测试⽬标主机会⾃动多次重启以完成设置。选择第⼆项的话,测试⽬标主机不会重启,但是需要⼿⼯部署测试的驱动程序。
点击下⼀步,出现连接类型(可以选择串⼝/⽹络等),本次选择串⼝,然后填写在测试⽬标主机上设置的参数,设置界⾯如下:
设置完成,点击下⼀步,则会在测试⽬标主机上进⾏相应的环境设置,期间测试⽬标主机会有多次重启。显⽰界⾯如下:
注意:如果在设置过程中在Creaing system restorepoint出现错误的话,需要在测试⽬标主机的C盘上打开系统还原点。
设置的步骤为:开始右键—》系统—》系统保护—》配置—》启动并设置C盘还原点。
设置完成后显⽰如下界⾯,提⽰配置成功:
点击完成,显⽰如下界⾯:
点击Apply应⽤,然后选择OK。
E.    在主计算机Visual Studio 2015程序测试配置
最后在主计算机的VS2015的调试菜单中—》选择附加到进程--》在传输(P)下拉框中选择Windows Kernel技术创新的重要性
ModelDebugger,在限定符(Q)下拉框中选择刚才配置的测试⽬标主机名称—》在可⽤进程中选择Kernel—》最后点击附加按钮。
点击附加按钮后出现调试界⾯表⽰配置成功,可以进⾏驱动调试了。
注意:这⾥如果点击附加按钮后Vs2015出现崩溃现象请检查Win10的版本,如果win10的版本还是10240版本的话请升

本文发布于:2024-09-22 01:20:19,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/233341.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:驱动程序   计算机   测试   配置   开发   内核   模式
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议