可能是在linux下比较习惯的原因吧!我反而喜欢直接用DDK的build进行编译驱动,但是毕竟VC++的还是相对省事,故不得不学习设置VC++的编译环境。

首先:windows下做驱动开发,版本控制很重要,系统的版本,DDK的版本,VC++的版本,都是有相关性,搞不好,就容易出错,比如版本不兼容等,我采用的是xp sp2,DDK是3790.1830,不过现在微软提倡用WDK,基本上也可以,我试用了下,也没啥问题,Virtual Studio 6.0,但建议用2005,这样版本兼容会更好一些。

其次:可以使用向导工具,Compuware DriverStudio,有点类似于MFC,可以直接建立驱动的框架,但我是不建议用这个的,毕竟省事是省事了,但是具体细节你也不清楚了,对学习和深入开发并无好处,对框架的把握是很重要的,而且那执行效率也不高。建议可以安装上,然后不使用,有它有些编译设置就省事了不少!

再次:学习书籍——可以看张帆的那边windows驱动开发技术详解,对初学者很合适,武安河那边windows 2000/XP WDM设备驱动程序开发写的就次了很多,内部原理都没有讲清楚,可以拿来做工具参考书,但初学者不合适。另外可以看看windows wdm驱动程序开发指南和programing the Microsoft Windows Driver Model,这两本书都不错,尤其是后者,很是推荐,但不适合初学者,我大体看了看,很费劲。

另外要记录一下用VC设置驱动程序,很多博客都没有说相关选项在哪,看起来很费劲:(张帆书上讲的蛮清楚的)

1:由于没有wizard向导(在不用Compuware DriverStudio的前提下),需要创建空的win32 Application工程,然后进行一系列修改。

2:当然不用多说,添加现有的源文件和头文件,当然也可以自己现编。

3:很多书、博客都说要添加新的编译版本,去掉Debug和Release,在我看来,可去也可不去,差别不大,要去掉的话,在build栏下的configuration下。

4:修改工程属性,这是重点,很多失败都是在这里没有设置好。在project栏里的setting中设置:

在general选项卡中,可以设置中间文件夹和输出文件夹,这个其实不是很重要,只要前后一致就行,不然就会报错说找不到在本工程文件下,某某文件或者某某文件不能打开,那时候多半是这里没有设置好,指向错误了

在C/C++选项卡中,把原Project Options删掉,替换成自己的配置,这里的设置也正好对应上面的勾勾选选。在张帆的书上是推荐这么设置的

/nologo /G3 /Gz /MLd /W3 /WX /Z7 /Od /D WIN32=100 /D _X86_=1 /D WINVER=0x500 /D DBG=1
/Fo "MyDriver_Check/" /Fd"MyDriver_Check/" /FD /c

注意:/Fo "MyDriver_Check/"就是刚才的中间文件夹,这里可以替换成你自己的,/Fd"MyDriver_Check/"也是设置生产的pdb文件的位置,这也可以替换你自己的,别的基本上不用改

在Link选项卡里,把原Project Options删掉,替换成自己的配置,这里的设置也正好对应上面的选项。张帆书上建议这么设置:

wdm.lib /nologo /base:"0x10000" /stack:0x40000,0x1000 /entry:"DriverEntry" /subsystem:console
 /incremental:no /pdb:"MyDriver_Check/HelloWDM.pdb" /debug /machine:I386 /nodefaultlib /out:"MyDriver_Check/i386/HelloWDM.sys" /pdbtype:sept /subsystem:native /driver /SECTION:INIT,D /RELEASE /IGNORE:4078

注意:wdm.lib 是适用于wdm驱动的,要是NT式驱动要设置成ntoskrnl.lib,/pdb:"MyDriver_Check/HelloWDM.pdb"这是设置中间文件pdb的文件名,/out:"MyDriver_Check/i386/HelloWDM.sys"这是设置输出的文件路径和文件名,都可以替换成自己的,另外/pdbtype:sept 在我的机子上会产生一个警告:

LINK : warning LNK4224: /PDBTYPE is no longer supported;  ignored

所以我把这个给去掉了

5:修改VC的lib目录和include目录。VC中选择Tools栏里的Options,在Directories选项卡里,在“show directory for”中选择“Include files”添加你所安装的DDK目录下的INC目录下的WXP和DDK里的WXP,在"Library files“中添加你的DDK目录下的LIB下的WXP里I386,并且将它们置顶,这里可以选择你自己的版本。

6:然后就可以编译了,当然这里面你也可能会碰到一些其他的错误选项,可以看我的另外一篇文章

另外如果选择安装Compuware DriverStudio的话,需要在VC++中打开DriverWorks/source中的Vbwlibs.dsw,并设置DriverStudio栏下的DDK Build Settings,设置DDK所在的目录,并选择compiler Options选项,一般选第二栏。然后就是重新编译Vbwlibs.dsw,惦记Rebuild All。不然会出现警告。

wdm驱动的学习初步相关推荐

  1. 用Visual Studio 2015 编译张帆的第一个WDM驱动,并且成功安装到Windows 10里面

    用Visual Studio 2015 编译张帆的第一个WDM驱动,并且成功安装到Windows 10里面!!! 开发工具:Visual Studio 2015 企业版 目 标 机:Windows 1 ...

  2. 第一个WDM驱动崩溃...

    1. WDM驱动在Win7上据说不能用EzDriverInstaller加载了,搜索了半天资料,才发现,win7自带的加载工具也不错. 计算机管理->设备管理器 : 菜单==操作->添加过 ...

  3. C++程序安装卸载WDM驱动

    编译环境:VS2012 + WIN8 64 测试环境:VM WIN7 测试对象:WDM驱动 (sys文件 和 inf文件) 项目类型:Win32 Console Application 其它说明:代码 ...

  4. VS2012编译调试WDM驱动(KdPrint无调试信息 debugview win7无调试信息)

    对于WDM驱动 VS2012有向导可以新建WDM项目 如图 这点说明不用自己配置 文件目录 C/C++ 选项 LINK 选项 等一系列的参数 比以前方便了不少 新建以后是空项目 放入<windo ...

  5. Windows驱动开发学习笔记(七)—— 多核同步内核重载

    Windows驱动开发学习笔记(七)-- 多核同步 基础知识 并发与同步 分析 InterlockedIncrement 原子操作相关API 内核文件 多核同步 临界区 示例一:错误的临界区 示例二: ...

  6. Windows驱动开发学习笔记(六)—— Inline HOOK

    Windows驱动开发学习笔记(六)-- Inline HOOK SSDT HOOK Inline Hook 挂钩 执行流程 脱钩 实验一:3环 Inline Hook 实验二:0环 Inline H ...

  7. Windows驱动开发学习笔记(五)—— SSDT HOOK

    Windows驱动开发学习笔记(五)-- SSDT HOOK 系统服务表 系统服务描述符表 实验一:通过代码获取SSDT表地址 通过页表基址修改页属性 方法1:修改页属性 方法2:修改CR0寄存器 实 ...

  8. Windows驱动开发学习笔记(四)—— 3环与0环通信(常规方式)

    Windows驱动开发学习笔记(四)-- 3环与0环通信(常规方式) 设备对象 创建设备对象 设置数据交互方式 创建符号链接 IRP与派遣函数 IRP的类型 其它类型的IRP 派遣函数 派遣函数注册位 ...

  9. Windows驱动开发学习笔记(三)—— 内核空间内核模块

    Windows驱动开发学习笔记(三)-- 内核空间&内核模块 内核空间 实验 第一步:编译如下代码 第二步:将 .sys 文件拷贝到虚拟机中 第三步:部署 .sys 文件并运行 第四步:创建一 ...

最新文章

  1. 专为设计师而写的GitHub快速入门教程
  2. php redis删除所有key,PHP 对 Redis key 值的操作
  3. Java21-day12【网络编程(网络编程入门(ip地址、端口、协议、InetAddress)、UDP通信程序、TCP通信程序)】
  4. 小程序直播间报错:{“errmsg“:“the current room status does not allow this operation rid:“,“errcode“:300023}
  5. 【转】MySQL的语句执行顺序
  6. Mark Down 使用实例
  7. java学习(166):socket服务端和客户端连接
  8. 青蛙吃蚊子小游戏源码
  9. excel php 数字科学计数_excel单元格设置技巧:这些自定义格式,你用过哪些?
  10. 相对地址转化为绝对地址
  11. [4K测试视频] 杜比4K UHD蓝光演示碟 Dolby.UHD.BluRay.Demo.Disc.March.2018.2160p.BluRay下载
  12. 云计算学习笔记——VLAN与三层交换机
  13. 电商中,订单号的生成方法
  14. 牛客IOI周赛20-普及组
  15. 【Paper】Anomalous Instance Detection in Deep Learning:A Survey
  16. 关于先有鸡还是先有蛋问题的科学的探讨
  17. HyperV使用主机摄像头
  18. js 按拼音 首字母 排序 并分组
  19. KNOWN_HOSTS处理
  20. Java设计模式七大原则(3)

热门文章

  1. Nginx 设置域名转发到指定端口
  2. xsy3320 string
  3. 【XSY3904】直线(分块)
  4. linux卡利系统设置密码,Windows 10 Windows Linux子系统安装指南-官网
  5. 没有免费午餐定理No Free Lunch Theorem
  6. 如何用Jmeter发送消息到Solace JNDI - 自定义配置
  7. 自然语言处理(三)——句法分析与依存句法分析
  8. 全球及中国可编程图形计算器行业研究及十四五规划分析报告
  9. jquery中的循环技巧
  10. 关于有限元应力结果精度的几点讨论