本文是对Win7(64)+VS2010+WDK7.1.0(WinDDK\7600.16385.1)开发驱动的小结。

一、系统工具

1、Win7(amd64位)系统

注:已装系统后,管理员身份运行cmd命令,查看bcdedit /set testsigning true、bcdedit  /debug on 等命令是否运行成功。若失败,请将bcdedit命令所在文件夹boot对应的盘(一般C盘)设置为活动状态;若依然失败,请修复C盘下的Boot(系统引导文件所在),或重装系统。

2、VS2010

3、WDK7.1.0(WinDDK\7600.16385.1)

地址:https://msdn.microsoft.com/en-us/windows/hardware/hh852365 该地址还连接 Windbg 调试工具 和Windows Symbols ,可以下载下来备后续调试时用。

4、WinDbg

地址:http://www.microsoft.com/whdc/devtools/debugging/default.mspx

Symbols:

地址:https://msdn.microsoft.com/en-us/windows/hardware/gg463028.aspx

注:Symbol文件是从微软的网站上http://msdl.microsoft.com/download/symbols下载而来,这个网址是不可以用IE直接打开的,WinDbg->File->Symbol File Path界面中输入SRV*C:\WINDOWS\Symbols*http://msdl.microsoft.com/download/symbols; 并选择Reload,WinDbg会自动帮你下载,关键是勾选reload。

5、InstDrv软件(用于安装、启动、停止、卸载驱动)

注:srvinstw.exe 也可以安装、卸载sys文件,但需要在cmd命令窗口下执行net start 驱动名、net stop 驱动名来启动、停止服务。

6、64Signer-V1.2(Win7 64位 私有测试数字签名软件)

7、DbgWiew.exe (查看内核模块的输出信息)

地址:https://technet.microsoft.com/en-us/sysinternals/bb896647.aspx

8、虚拟机(WMware10.0供双机调试)

地址:http://www.microsoft.com/zh-CN/download/confirmation.aspx?id=8002

9、其他软件: 虚拟光驱DAEMON Tools Lite、EasyBCD(系统引导文件修复工具)、PartitionManager(将C盘设置为活动分区)等

二、配置VS2010 64位开发环境

1、在VS中VisualC++下新建 空项目

添加Driver类,将头文件删除,将Driver.cpp文件修改为Driver.c文件,内容如下:

#include "ntddk.h"

// 提供一个Unload函数只是为了

VOID DriverUnload1(PDRIVER_OBJECT driver)

{

// 但是实际上我们什么都不做,只打印一句话:

DbgPrint("MyDriver: Our driver is unloading…\r\n");

}

NTSTATUS

DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)

{

DbgPrint("MyDriver: Hello, my salary!");

DriverObject->DriverUnload = DriverUnload1;

return STATUS_UNSUCCESSFUL;

}

注:添加类后,在属性中显示出C/C++项,供配置属性。

2、点击VS中的解决方案配置的下按钮(即debug所处的下拉框按钮),点击配置管理器,点击活动方案配置,点击新建,输入DriverDebug64、默认空,解决方案平台:选X64。

建成后的效果

3、点击VS中视图->其他窗口->属性管理器

4、右击属性管理器中的DriverDebug64,选择属性,在弹出的窗体中进行必要的设置。

(此处的设置都是必须的, 对复杂些的驱动开发也许还要额外另加设置)

注:WDK7.1.0默认安装在C:\WinDDK\7600.16385.1文件夹下

1)常规

目标文件扩展名:.sys

2)VC++目录

可执行文件目录(编译器路径):C:\WinDDK\7600.16385.1\bin\amd64

注:Xp系统64位如下:

----------C:\WinDDK\7600.16385.1\bin\x86\amd64

----------C:\WinDDK\7600.16385.1\bin\x86

包含目录:C:\WinDDK\7600.16385.1\inc\api

C:\WinDDK\7600.16385.1\inc\crt

C:\WinDDK\7600.16385.1\inc\ddk

库目录:C:\WinDDK\7600.16385.1\lib\win7\amd64

3)C/C++

预处理器->预处理器定义:

_AMD64_=1,AMD64=1,STD_CALL=1,WINVER=0x0501,_DEBUG =1

高级->调用约定:__stdcall (/Gz)

代码生成-->运行库:选择多线程调试/MTd 或者 多线程调试DLL/MDd (主要解决_DEBUG未预定义的问题)

4)连接器

输入->附加依赖项:ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB;%(AdditionalDependencies)

输入->忽略所有连接库:是 (/NODEFAULTLIB)

清单文件->启用用户账户控制(UAC):否 (/MANIFESTUAC:NO)

系统->子系统:控制台 (/SUBSYSTEM:CONSOLE)

系统->驱动程序:驱动程序 (/Driver)

系统->堆栈保留大小:4194304(可修改)

系统->堆栈提交大小:4096  (可修改)

高级->入口点:DriverEntry

高级->基址:0x10000

高级->随机基址:(清空)

高级->数据执行保护(dep): (清空)

调试下:

解决_DEBUG未预定义的问题

C/C++

代码生成-->运行库:选择多线程调试/MTd 或者 多线程调试DLL/MDd

解决找不到符合问题(包含调试信息的未生成工程名.pdb文件)

C/C++

常规-->调试信息格式:用于“编辑并继续”的程序数据库 (/ZI)

优化:已禁用 (/Od)

连接器

生成调试信息:是 (/DEBUG)

注:参考C:\WinDDK\7600.16385.1文件夹的ia64、X86等路径,进行修改可以配置为ia64、32位系统。

5、编译若通过,则配置成功,并生产.sys等文件。

三、调试

配置调试机

1、将Win7设置为可调试状态

1)以管理员身份打开cmd命令窗口:Win + R 打开运行输入框,输入cmd;或鼠标点击系统开始图标,在输入框中输入cmd,右击上方搜索显示出的cmd.exe,以管理员身份运行。

2)依次输入:

bcdedit /?

Bcdedit /enum OSLOADER

Bcdedit /copy {current} /d “Windows 7 Copy”

Bcdedit /debug on

Bcdedit /bootdebug on

Bcdedit /dbgsettings

Bcdedit /timeout 7

2、将Win7设置为测试版

管理员身份运行cmd命令,bcdedit /set testsigning true

3、测试证书数字签名

以管理员身份运行64Signer V1.2.exe,点击浏览找到并双机.sys文件,点击签名。

4、查看内核输出信息

以管理员身份运行Dbgview.exe,点击Capture菜单,勾选上Captrue kernel项。

5、配置WinDbg

1)设置系统字符表路径:WinDbg->File->Symbol File Path界面中输入

SRV*C:\WINDOWS\Symbols*http://msdl.microsoft.com/download/symbols; 并选择

Reload,WinDbg会自动下载字符表,关键是勾选reload。

2)设置自己生成的.sys对应的字符(Symbol)路径:

E:\Project\TestDriver\TestDriver\x64\DriverDebug64

3)设置自己生成.sys的原代码路径:E:\Project\TestDriver\TestDriver

注:自己生成的.sys文件默认路径:E:\Project\TestDriver\x64\DriverDebug64

6、安装.sys文件

以管理员身份运行运行InstDrv.exe,选择.sys文件,进行安装、启动等操作

注:请不要在本地主机,测试含有断点的内核,否则卡机,无法进行任何操作,应该采用双机调试(即新建个虚拟机,本地机与虚拟机通过管道进行通信)。

配置虚拟机

1、安装虚拟机

注:主板默认没有开启虚拟化技术,一般方法是开机或重启时按F12键进入BIOS菜单,将虚拟化(Virtualization...

2、配置虚拟机

1)开始-->WMware Work Stations-->双击“我的电脑”下的一个虚拟机(Windows 7 x64)-->编辑虚拟机设置-->移除打印机-->添加窜行端口

2)选中刚添加的窜行端口,在右侧的对话框中,设置如下:

勾选 启动时连接

选择 使用命名的管道(N)

其下的两个下拉框分别选择:该端是服务器、另一端是应用程序

3)本人执行和未执行该步骤都能够调试成功。本步骤作为多余补偿,如果你未执行该步骤失败,请将主机目录C:\WINDOWS\Symbols下的拷贝到虚拟机的相同位置。并且把自己生成的驱动编译后生成的字符文件(E:\Project\TestDriver\TestDriver\x64\DriverDebug64

目录下)放到虚拟机的C:\WINDOWS\Symbols目录下。主要匹配主、客机上字符的一致性。

3、双机调试

给源代码添加调试时中断语句

#if _DEBUG   //DBG

__debugbreak(); //64位

#endif

重新生成sys文件,重新执行以上步骤,然后以管理员身份打开主机上的WinDbg软件,再在客户机安装.sys文件及开启、关闭、卸载等操作。开启后即进入中断点,可以一步步进行调试。。。

注:汇编_asm int 3 中断,在xp上 正确,在64位Win7上报错。如果未能进入断点进行调试,请检查sys文件是否在客户机(虚拟Win7系统)安装成功,系统字符集(Symbols)、本人字符Symbols是否下载或设置正确,管道端口是否正确等

提示:在本地主机上不以管理员身份运行软件,也可能是管理员身份成功运行,而客户机(虚拟机上一般都要是以管理员身份运行软件)

若进行 Win7 + WDK8.0+Windbg 进行Driver Filter开发,请将WDK7卸载,否则运行时会报大堆离奇错误。。。。

转载于:https://www.cnblogs.com/shenchao/p/4832843.html

Windows 7 驱动开发相关推荐

  1. 九七的Windows内核驱动开发 WIN10-2004+VS2019+WDK驱动开发环境安装及配置

    WIN10-2004+VS2019+WDK驱动开发环境安装及配置 一.定义介绍   本节介绍如何在Windows10系统(2004版本,操作步骤中有如何查看版本)中安装VS2019及WDK开发包,并进 ...

  2. Windows的驱动开发模型

    在Windows的不同版本上开发的驱动程序"模型"(模型这个词语应该来源于单词"Mode".在Windows NT上,驱动程序被称为Kernel Driver ...

  3. windows xp 驱动开发(三)DDK与WDK WDM的区别

    转自: http://www.cnblogs.com/hyddd/archive/2009/03/15/1412684.html 最近尝试去了解WINDOWS下的驱动开发,现在总结一下最近看到的资料. ...

  4. Windows 7驱动开发系列(一)--前言WIN7的新特性

    随着工作时间的增加,感觉自己技术越做越向DESIGN发展哈哈,一些具体的工作反而少了很多,所以做为总结呢,把自己对WINDOWS驱动分享一下,当然了水平及时间都有限欢迎大家一起讨论. 其实在网上看招聘 ...

  5. Windows 10驱动开发入门(一):环境搭建

    驱动的开发对于初学者来说是不友好的,我们不知道怎么入手,从哪里入门.对于初学者来说束手无策,特别是碰到一个很简单的问题,都不知道怎么解决,这一系列的教程,就是用来排除这些障碍. 大部分的驱动开发教程都 ...

  6. windows XP 驱动开发环境搭建

    1.需要安装的软件: 在Windows XP的基础上,安装顺序: 先装上VC++6.0,再装DDK2600(也就是DDK的XP版),最后装 Driver Studio 3.2. 下载地址: XP系统的 ...

  7. Windows打印机驱动开发

    本文地址:http://www.tongxinmao.com/Article/Detail/id/317 开发打印机驱动程序通常有两种途径:一是开发一个完整的驱动程序,二是利用微软提供的通用打印机驱动 ...

  8. windows xp 驱动开发(十八) USB驱动程序开发用到的工具总结

    转载请标明是引用于 http://blog.csdn.net/chenyujing1234 欢迎拍砖! 观察USB设备的工具. 通过这些工具可以方便学习USB协议 一.   usbview 请参考我的 ...

  9. Windows 7驱动开发系列(四)--WDM模型介绍

    有关WINDOWS DRIVER的模式还有一个很重要的概念就是WDM模型,一般来说内核模式的驱动都要遵守WDM(除了某些需要支持WIN2000的驱动以外)那么什么是WDM呢?它是一套规则: 1.需要在 ...

  10. Windows打印机驱动开发笔记(一)

    在Windows中,打印机驱动的作用是编写一组接口.应用程序调用的GDI函数会变成相应的DDI函数,打印机驱动提供的这组接口负责将DDI函数转变为打印机识别的的指令.至于是通过网口.串口等接口与真实打 ...

最新文章

  1. AI校招程序员最高薪酬曝光!腾讯80万年薪领跑,还送北京户口
  2. Jenkins 安装与使用--实例
  3. 现代软件工程系列 学生读后感 梦断代码 DTSlob (1)
  4. vue-datepicker的使用
  5. 手工打造目标PE的步骤
  6. 拓端tecdat|R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)
  7. 电阻阻值标准以及选择参照表
  8. Windows10系统JDK下载和安装
  9. 菠萝来啦。新一代VueX 来啦 他有一个特别甜的名字“Pinia”,再不学你就out了【 Pinia/Vuex5中文文档】
  10. 超实用!常用贴片三极管丝印与型号对照表
  11. 多商户商城系统功能拆解23讲-平台端分销等级
  12. 别错过,教你如何用电脑玩手机
  13. 计算机毕业设计JavaWeb企业客户管理系统(源码+系统+mysql数据库+lw文档)
  14. 取消latex伪代码的行号
  15. 《卡尔琳记事本》,召唤师的故事,周更
  16. 计算机夏令营英语自我介绍,保研夏令营英语自我介绍
  17. Qt sqlite 使用备忘
  18. centos7同网段下文件互传
  19. WebDriver-鼠标、键盘操作
  20. Excel被保护了无法复制

热门文章

  1. java中如何实现货币兑换_java货币转换
  2. java EasyUI导出当前页和导出模板
  3. 我对“硬盘分区”的愚见
  4. cad中直径符号不显示_CAD上明明有图,但是打印的时候不显示怎么办?原来要这样设置...
  5. python中聚类和分类的区别_关于聚类和分类的详细信息
  6. c51用c语言写PO口复用6,毕业回馈—89C51之GPIO使用(示例代码)
  7. 地籍图宗记注记标注实现
  8. 黄色量能通达信指标公式!没有未来函数,不加密的副图指标!
  9. shineblink 雨滴感应传感器
  10. 金山实习周记(2)——沟通