




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
置顶Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建(菜鸟的经验) 分类: 驱动开发 2011-08-12 23:30 863人阅读 评论(3) 收藏 举报 自己在研究驱动开发,第一步就是开发环境的搭建,网上已有很多的教程一,我也是按着教程一步一步搭建的,但在搭建过程的过程当中遇到一些问题,也花了我不少时间。第一个难题就是,我是Windows7+VS2010+WDK的开发环境。首先我参考了网上的一篇文章:/guojingjia2006/archive/2011/03/19/142211.htmlWINDOWS 7 配置驱动开发环境(wdk7.60) 1. 安装VS2010,WDK7.60(GRMWDK_EN_7600_1)2. 新建VC 控制台项目(选择为空项目) 3. 新建项目配置“driver” ,点击下拉按钮-点击(配置管理器)输入名称(driver)点击确定就可以了,其他的不要动哦!完成后的效果!点击确定按钮之后呈现出来的画面鼠标右击新建的driver属性,会弹出以下窗口!4. 设置VC+路径 a. 配置可执行文件目录:E:WinDDK7600.16385.1binx86; b. 配置包含目录:E:WinDDK7600.16385.1incddk E:WinDDK7600.16385.1inc E:WinDDK7600.16385.1incapi c. 配置库目录: E:WinDDK7600.16385.1libwin7i3865新建C/C+文件 不然无C/C+设置选项 常规 目标文件扩展名:.sys /必选 6. 设置C/C+选项 常规选项卡 1 调试信息格式(C7 兼容(/Z7) /可选 2 警告等级 (2 级(/W2) /可选 3 将警告视为错误 (是(/wx) /可选 优化选项卡 优化(禁用/Od) /可选 预处理器 预处理器定义:WIN32=100;_X86_=1;WINVER=0x501;DBG=1 /必选 代码生成 启用最小重新生成:否 /可选 基本运行时检查:默认值 /可选 运行时库:多线程调试(/MTd) 或 多线程(/MT) /建议选 缓冲区安全检查:否 /可选 (可避免出现 LINK : error LNK2001: 无法解析外部符号 _security_cookie) 高级 调用约定 _stdcall(/Gz) /必选 7. 链接器设置 常规 启用增量链接:否(/INCREMENTAL:NO) /建议 选上 忽略导入库:是 / 可选 ( 设置为此值时,必须在附加库目录中加: E:WinDDK7600.16385.1libwin7i3865 这样项目就不会依赖 IDE 环境的设 置) 如果否 ( 设置为此值时,将依赖 IDE 的环境的相关设置 ) 输入 附加依赖项 ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB /必选 /NT式驱动 ntoskrnl.lib WDM式驱动 wdm.lib ( HalXXX 函数在Hal.lib, WmiXXX 函数在 wmilib.lib , NdisXXX函数在 ndis.lib ) ( 必要时需要增加微软的标准库 MSVCRT.LIB MSVCRTD.LIB(调试库) LIBCMT.LIBIBCMTD.LIB(调试库) ) ( 如果源码中有 source 文件,那么该文件的 TARGETLIBS 字段会列出该项 目需要的库 ) 忽略所有默认库: 是 (/NODEFAULTLIB) /必选 清单文件: 启用用户账户控制(UAC) 否 /必选 不然会出现 LINK : fatal error LNK1295: “/MANIFESTUAC”与“/DRIVER”规范不兼容;链接时不使用“/MANIFESTUAC” 调试: 生成调试信息 是(/DEBUG) /可选 生成映像文件:是(/MAP) /可选 映像文件名:$(TargetDir)$(TargetName).map /可选 系统(System) 子系统: 控制台(/SUBSYSTEM:CONSOLE) /必选 堆栈保留大小:4194304 /可选 堆栈提交大小: 4096 /可选 驱动程序: 驱动程序(/DRIVER) /必选 高级: 入口点:DriverEntry /必选 随机基址:清空 /把框里的数据删掉。(yes也不是no也不是就是要一个干干净净的文本框) /必选 不然会出现 e:xxx.sys : fatal error LNK1295: “/DYNAMICBASE”与“/DRIVER”规范不兼容;链接时不使用“/DYNAMICBASE” 数据执行保护(DEP): 清空 /把框里的数据删掉。(yes也不是no也不是就是要一个干干净净的文本框) /必选 不然会出现 e:xxx.sys : fatal error LNK1295: “/NXCOMPAT:NO”与“/DRIVER”规范不兼容;链接时不使用“/NXCOMPAT:NO” 设置效应和:是(/RELEASE) /可选 基址:0x10000 /建议选上 命令行:/SECTION:INIT,D /IGNORE:4078 (建议不要写进去,会报错!) 最后给出一个超级简单的代码来测试一下我们配置的是否成功?#include ntddk.hNTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath) return STATUS_UNSUCCESSFUL; 如果没有报错那么恭喜你配置成功了!但是结果失败了,编译的时候会出现错误。结果在网上找原因呀,发现把vc目录下的sal.h代替inc/api目录下的sal.h, 但是还是编译不过,后来我想还原inc/api目录下的sal.h,所以我就按了ctrl+z,结果不知道为何(可能是点快了),被我删掉了,于是我就没有了inc/api/sal.h。到止我放弃了上面那blog的方法决定另寻方法。然后我又在网上找资料,发现了VisualDDK是一个不错的东东,也支持vs2010,于是我下载下来安装。然后我启动VS2010,新建了一个驱动的项目,试着编译一下(心里在祈祷,让我成功),结果大失所望。说找不到sal.h,因为我删掉了。知道原因就好办,我就想重新安装一下WDK吧,但重新安装的时候,才发现不能重新安装,除非你少选一项安装项,首次安装的时候我是全选所有安装项(非常郁闷)。于是我就报着试一试态度用上面用过的方法:用vc目录下的sal.h代替inc/api目录下的sal.h,然后再编译一次,这次是不同的错了,后来在网上找答案,发现了另一篇文章:/xlhblog/archive/2011/03/22/1991785.html Windows 7 + Visual 2010 + WDK 7600.16385.1 配置方法1. 新建一个空DLL项目2. 增加一个主程序文件,如 entry.c3. 找到配置管理器,添加一个新的配置叫做 Driver Debug(以后还可以再设置一个Driver Release),如图4. 在属性管理器上找到 Driver Debug,右键菜单中找到“属性”,开始配置5. 在“常规”选项卡中5.1 目标文件扩展名:修改为 .sys5.2 清除时要删除的扩展名:添加一个 *.sys,其他继承原来的系统设置6. “VC+目录”选项卡中6.1可执行文件目录: 添加一条 F:WinDDK7600.16385.1binx866.2 包含目录:添加三条,分别为 F:WinDDK7600.16385.1inc F:WinDDK7600.16385.1incapi F:WinDDK7600.16385.1incddk6.3 库目录: 添加一条 F:WinDDK7600.16385.1libwin7i3867. “C/C+” 选项卡中7.1 预处理器: “预处理器定义” 添加定义 WIN32=100;_X86_=1;WINVER=0x501;DBG=1 如果是 Release,那么可想而知,不需要 DBG=17.2 高级: “调用约定” 修改为_stdcall(/Gz)7.3 常规: “警告等级”设置为 /W4 将警告视为错误选为 是/WX其他为建议可选项目优化: 优化选项可以选择为 已禁用/Od代码生成:缓冲区安全检查 否8. “链接器” 选项卡中8.1 输入: 在“附加依赖项”中输入ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB 把“忽略所有默认库” 选择为 是 (/NODEFAULTLIB)8.2 清单文件:启用用户账户控制(UAC) 否 否则会出现“/MANIFESTUAC”与“/DRIVER”规范不兼容8.3 系统: “子系统” 选择为 控制台(/SUBSYSTEM:CONSOLE) “驱动程序” 选择为 驱动程序(/DRIVER)8.4 高级: “入口点” 输入为DriverEntry “基址” 输入为0x10000 把 “随机基址” 中原来的是 (/DYNAMICBASE) 内容删掉,只留下空的文本框,因为“/DYNAMICBASE”与“/DRIVER”规范不兼容 把 “数据执行保护(DEP)” 中原来的是 (/NXCOMPAT:NO) 内容删除,只留下空的文本框,因为“/NXCOMPAT:NO”与“/DRIVER”规范不兼容8.5 调试: 根据当前是 Driver Debug 还是 Driver Release 选择是否生成调试信息是(/DEBUG)8.6 命令行: 添加一段 /SECTION:INIT,D /IGNORE:4078 这样可以防止出现4078的警告 【找到多个“INIT”节,它们具有不同的属性(E2000020)】其他为可以选择的选项常规: “启用增量链接” 可以设置为否(/INCREMENTAL:NO) 建议选上这样编译环境就设置完成了,还可以再添加一个 Driver Release 版本,去掉调试信息但是,这样设置还是会有一堆编译错误,如: C:Program FilesMicrosoft Visual Studio 10.0VCincludecrtdefs.h(550): error C2143: syntax error : missing ) before constC:Program FilesMicrosoft Visual Studio 10.0VCincludecrtdefs.h(550): error C2143: syntax error : missing before constC:Program FilesMicrosoft Visual Studio 10.0VCincludecrtdefs.h(550): error C2059: syntax error : ,C:Program FilesMicrosoft Visual Studio 10.0VCincludecrtdefs.h(550): error C2059: syntax error : )C:Program FilesMicrosoft Visual Studio 10.0VCincludeexcpt.h(56): error C2143: syntax error : missing ) before type那么这时候需要拷贝F:Program Files (x86)Microsoft Visual Studio 10.0VCincludesal.h,然后覆盖掉F:WinDDK7600.16385.1incapisal.h这样就会导致另外一个问题,Microsoft Visual Studio 10.0VCincludesal.h 中include了CodeAnalysissourceannotations.h,所以如果在编译环境中调用build,会出现错误找不到sourceannotations.h,所以要:把Microsoft Visual Studio 10.0VCincludeCodeAnalysis 拷贝到F:WinDDK7600.16385.1incapi 下!下面引用BLOG的一段原文那么这时候需要拷贝F:Program Files (x86)Microsoft Visual Studio 10.0VCincludesal.h,然后覆盖掉F:WinDDK7600.16385.1incapisal.h这样就会导致另外一个问题,Microsoft Visual Studio 10.0VCincludesal.h 中include了CodeAnalysissourceannotations.h,所以如果在编译环境中调用build,会出现错误找不到sourceannotations.h,所以要:把Microsoft Visual Studio 10.0VCincludeCodeAnalysis 拷贝到F:WinDDK7600.16385.1incapi 下!这一下再编译,哈哈,成功了!因为VisualDDK支持用IDE调试,所以我就想配置VisualDDK+VMwar7+VS2010来开发驱动。理想是美好的,但现实总是残忍的。我参考着/BoyXiao/archive/2011/07/31/2122755.html来进行配置,驱动程序环境搭配(VS2010 + WDK + VirtualDDK + VMware) 以前一直都是用 VS2008 + DDKWizard + WinDbg 来进行驱动程序的开发调试的,使用 DDKWizard 来搭配调试环境呢,在 VS2008 下也还算方便,因为不需要自己去设置一些什么包含文件啊,源代码路径啊之类的就可以直接编译驱动程序源码,安装好 DDKWizard 后,在 VS2008 中就会自动出现一个开发驱动程序的项目框架,就跟选择创建 WinForm 应用程序一样的,创建好 DDK 项目后也是可以直接在 VS2008 下编译的,所以在开发上也还方便,但是在调试上的话,就麻烦了,在 WinDbg 中有一大堆东西要设置,在虚拟机上也要设置一些命令,关于 WinDbg + VMware 开发调试驱动程序在网上有比较有名的酒若琳的文章,不过那是很多年以前的文章了,有兴趣的可以去谷歌搜索 酒若琳 WinDbg ,应该是可以找到那篇文章的。同时对于这一块的使用,也可以参考笔者的文章驱动开发 WDK 调试及 SVN 环境搭配,博文地址为:/BoyXiao/archive/2011/05/06/2038578.html但是在使用 DDKWizard + VS2008 进行驱动开发时,是不能够直接通过 VS2008 来调试的(这里可能有其他门路来实现,但是笔者没有实现过),而一般都是在 WinDbg 中设置好符号文件的路径以及源代码的路径,然后再驱动程序的源代码中嵌入一些汇编代码,当然这些汇编代码只是简单的用来实现一个中断,从而在 WinDbg 调试器中会生成一个断点。这样调试起来速度慢,也不好控制,所以有时候觉得在做开发的时候,在调试上花去的时间太多了,会不爽。 在本次博文中,将要介绍的是一个开源项目 VirtualDDK(VirtualKD 中包含了 VirtualDDK),通过这个开源项目即可以很好的实现在 VS2010 以及 VS2008 下直接调试驱动程序,同时对于 VirtualDDK 的环境搭配也是很简单的,下面就直接上一些图片以及一些注解来说明,由于文章存在大量的截图,所以读者只要按着截图来做基本上都是可以成功的。同时下面给出官网上的一篇关于利用 VirtualDDK 和 VS 来调试驱动程序的文章(内容非常详细),基本上通过笔者的这篇博文和官网上的博文就完全可以搭建驱动程序开发环境成功了 !同时在官网上的环境为 VS2008 的。而且在官网的博文中还有两个比较好的驱动例子 ! 1. A dummy driver that simply prints a message when it is loaded . 2. A ramdisk driver, that creates a virtual hard disk .Making Your First Driver Complete WalkThrough博文地址为:/visualddk/firstdriver/ 前期设置: 安装虚拟机和 VS2010,然后再网络和共享中心中进行一些设置,设置即是将本地连接网卡,安装虚拟机后生成的两块虚拟网卡的 IP 地址都改为自动获取 IP 地址,同时需要修改一块虚拟网卡的共享属性。在虚拟机中安装好 Windows 操作系统并且设置网卡类型为 NAT 类型将本地主机开启远程,并且将本地主机的防火墙全部关掉(这一步,看你运气了,有时候不设置这些东西,在 VS2010 下也是可以利用 VirtualDDK 调试驱动程序成功的,但是你人品不好的时候就难说了,就比如我自己,前些日子不设置这些东西也都可以调试的,但是这几天死活调不上,结果把上面这两东西设置了就可以调试了,估计是因为 VirtualDDK 需要 UDP 来进行调试,所以,防火墙还是禁用比较好,但是我一直都不明白这个调试和开不开远程有何关系,感觉着不是扯淡嘛)同样在你的虚拟机操作系统上,我这里安装的是 XP ,也一样需要开启远程并且关闭防火墙,理由同上,看你人品了。 检测是否设置成功: 设置好上面这些东西后,我们需要来检测一下,这个检测是必要的,因为如果你检测没有通过的话,在后面是绝对不可能成功的利用 VS2010 + VirtualDDK 来调试驱动程序的1. 在主机里面 Ping 虚拟机上的 XP 操作系统(必须成功)。2. 在虚拟机里面的 XP 操作系统中 Ping 本地主机(必须成功)。3. 在虚拟机里面的 XP 操作系统中通过网上邻居访问本地主机(必须成功)。 下载和安装 VirtualDDK: 安装好 VirtualDDK 后(一般安装在 C:Program FilesVisualDDK 目录下),可以在该目录下看到一个 Target 文件夹,将这个 Target 文件夹拷贝到虚拟机上的 XP 操作系统下,并且运行 Target 文件夹下的 vminstall.exe,然后将虚拟机中的 XP 操作系统重新启动(安装完 vminstall.exe 后会提示需要重启系统)。 VS2010 创建 VirtualDDK 项目: 打开 VS2010 ,创建 VirtualDDK 项目,创建过程如下截图:创建好 VirtualDDK 项目后,您可以尝试着生成以下解决方案,可以看到很容易的生成了解决方案,也会在指定的目录下生成 .sys 文件和 .pdb 文件。 调试驱动程序: 开始调试驱动程序:首先是启动虚拟机中的 XP 操作系统,等到 XP 操作系统出现以下界面时(你可以通过上下键来使得 30 秒倒计时停止),到 VS2010 中,完成以下操作:当出现下面的错误提示时,直接确定忽略,然后重新 Start Debug 即可然后再加载我们自己写的这个驱动程序即可,这样就会出现调试界面了,在虚拟机中也会显示一些消息: 在 VBox 下调试驱动程序: 在 VBox 下调试驱动程序其实和在 VMware 下调试是差不多的,也就是具体的操作和上面的操作基本上是一样的,但是需要改变一点点东西,首先定位到 VBox 的安装目录(C:Program FilesOracleVirtualBox),可以在该目录下看到一个 VBoxDD.dll,我们需要将这个文件的名字改为 VBoxDD0.dll,改名后,我们再定位到 VirtualDDK 的安装目录下(C:Program FilesVisualDDKVirtualBoxx86),并且将该目录下的 VBoxDD.dll 拷贝到上面的这个目录(C:Program FilesOracleVirtualBox)下。至于其他的步骤的话,就和前面在 VMware 下的操作是一样的了。结果失败了:在driver launch setting里面总是不能刷出我的vmware上的xp操作系统。在网上看到很多人说,这种方式经常会出现问题,大都建议用Windbg双机调试。 于是放弃这种驱动调试方法的环境配置,转到配置windbg双机调试的环境配置。第二个难题就是双机调试的时候老是连接不上。我是参看/iamahper/blog/item/0e697a37c0d2741a90ef394d.html进行双机调试环境配置,结果可是老是连接不上。【原】WinDBG+VMware双机内核调试环境搭建2010-02-01 22:56因为接下来要写个文件过滤驱动,要有个内核调试环境,昨天天搭了一下,比较简单,网上已有详细步骤。vmware中装个winxp,暂且称为SlaveOS吧。相应的我们主系统成为MasterOS。我的步骤如下:1.先在MasterOS上装WinDbg。在桌面建一个快捷方式,修改程序启动参数。具体操作为右键WinDBG快捷方式-属性。现在的目标内容为(假设):E:Program FilesDebugging Tools for Windows (x86)windbg.exe,在它后边加上 -b -k com:pipe,port=.pipecom_1,resets=0,注意,红字部分加在引号外面。确定。2.MasterOS设置结束,接下设置vmware虚拟机。设置虚拟机需要在SlaveOS关闭的情况下进行。打开虚拟设置,增加一个“Serial Port,如图1:图13.下一步选择”Output to named piped.如图2:图24.虚拟机配置完毕,接下来启动SlaveOS进行配置。打开c:boot.ini。在文件末尾加上:multi(0)disk(0)rdisk(0)partition(1)WINDOWS=Microsoft Windows XP Professional Debug /fastdetect /debugport=com1 /baudrate=115200保存后重启。启动菜单会新增一个debug的菜单。如图3:图35.在上述界面按下上下箭头键。回到MasterOS,通过快捷方式打开Wi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版智慧农业用地土壤检测与评估政府采购服务合同
- 二零二五年度企业财务顾问与财务咨询与财务顾问服务合同778
- 2025版大型柴油发电机组燃料补给合同模板
- 2025版办公室装修与室内空间设计及智能化系统集成服务合同范本
- 二零二五年度城市桥梁检测与加固合同范本
- 二零二五年冷链运输包月合同规范文本
- 业主合资建房协议书范本
- 扩散焊接技术协议书范本
- 对帐还款协议书范本
- 大门楼拆除协议书范本
- DB4420-T 51-2024 脆肉鲩鱼肉脆度的测定 质构仪法
- 江苏省南通市中考物理部分试题总结课件
- 2025届新高考政治复习备考策略及教学建议 课件
- 呼吸与危重症医学专科医师规范化培训基地认定细则
- JGJ/T235-2011建筑外墙防水工程技术规程
- CHT 8024-2011 机载激光雷达数据获取技术规范(正式版)
- 乒乓球竞赛规则、规程与裁判法
- 北川县楠木园水泥用石灰石矿矿山地质环境保护与土地复垦方案
- 半导体芯片知识讲座
- 2024年广东广州市天河区社区专职工作人员招聘笔试参考题库附带答案详解
- 电池的历史与发展
评论
0/150
提交评论