www.icwin.net icwin@icwin.net, sales@icwin.net
Windows WDM 驱动开发
Windows WDM 驱动开发
我们的技术是您的!
Wyouken & O4icwin
2005 年 11 月
Rev. 0.1
WWW.ICWIN.NET
E-mail: sales@icwin.net
, icwin@icwin.net
1
我
们的技术是您的!
Write by Wyouken
&
O4icwin
www.icwin.net icwin@icwin.net, sales@icwin.net
Windows WDM 驱动开发
WWW.ICWIN.NET
E-mail: sales@icwin.net
, icwin@icwin.net
2
我
们的技术是您的!
Write by Wyouken
&
O4icwin
版权(c )2005-2006,ICWIN 保留所有权利
Revision History
Revision Comments Issue Date Author
V0.1 第一部分发布 11/10/2005 Wyouken & O4icwin
www.icwin.net icwin@icwin.net, sales@icwin.net
Windows WDM 驱动开发
WWW.ICWIN.NET
E-mail: sales@icwin.net
, icwin@icwin.net
3
我
们的技术是您的!
Write by Wyouken
&
O4icwin
目录
第一章 概述...........................................................................................................................6
1.1 本教程的规划:...............................................................................................................6
第二章 WDM驱动程序的运行.................................................................................................7
2.1 WDM驱动程序的基本调用流程:.....................................................................................7
2.1.1 驱动程序何时从何处开始执行?........................................................................7
2.1.1.1 第一次安装好驱动程序:................................................................7
2.1.1.2 驱动程序正常运行:........................................................................7
2.1.2 DriverEntry()大约做些什么?.........................................................................7
2.1.2.1 IRP主功能码(Major Function Code) .......................................9
2.1.2.2 IRP_MJ_PNP次功能码(Minor Function Code) .......................10
2.1.2.3 IRP_MJ_POWER次功能码(Minor Function Code) ...................10
2.1.3 驱动程序与应用程序相关的功能码如何调用? ..............................................10
2.1.3.1 DriverEntry()中您必须要注册回调函数 ...................................10
2.1.3.2 在您的应用程序中正确调用CreateFile() .............................11
2.1.3.3 应用层调用驱动的消息参照:.....................................................11
2.1.3.4 IoControl调用:...........................................................................11
第三章 开始编写WDM驱动程序...........................................................................................13
3.1 得到一个Demo工程:.....................................................................................................13
3.2 在VC下配置DDK的开发环境...........................................................................................15
3.2.1 我的目录.............................................................................................15
3.2.1.1 我们应该在系统环境变量里设置 ..................................................15
3.2.2 安装VC6................................................................................................17
3.2.3 打开wdm1\sys\Wdm1.dsp工作区文件 ...............................................18
3.2.4 修改H:\driverDev\MakeDrvr.bat文件 ...........................................18
3.2.5 设置VC的环境.....................................................................................19
3.2.5.1 前面的内容编译时出了错误(配置'MakeDrvr') ......................19
3.2.5.1.1 在project -> settings中设置成如下: .......................19
3.2.5.1.2 还可以在Tools-> Options-〉directories中选择
“Executable files”并添加MakeDrvr.bat的目录即可 .................20
3.2.5.1.3 再按F7 编译 有编译提示 ..................................................20
3.2.5.1.4 搞清楚 MakeDrvr.BAT文件的功能 ...................................21
3.2.5.2 前面的内容编译时出了错误,让我们看看是什么原因 ..............22
第四章 安装DebugPrintMonitor驱动程序.................................................................................24
4.1 用控制面板安装DebugPrintMonitor...........................................................................24
4.2 检查DebugPrint driver的安装情况...........................................................................29
第五章 安装wdm1 驱动程序..........................................................................................................30
5.1 INF 文件.........................................................................................................................30
5.1 全新安装驱动.................................................................................................................30
5.1.1 安装驱动WDM1.SYS.............................................................................................30
5.2 测试DebugPrintMonitor...............................................................................................30
www.icwin.net icwin@icwin.net, sales@icwin.net
Windows WDM 驱动开发
WWW.ICWIN.NET
E-mail: sales@icwin.net
, icwin@icwin.net
4
我
们的技术是您的!
Write by Wyouken
&
O4icwin
第六章 执行应用程序...................................................................................................................32
6.1 打开Wdm1Test.dsp.........................................................................................................32
6.2 编译Wdm1Test 工程.......................................................................................................32
6.3 修改Wdm1Test .CPP文件的setupapi.h的路径 ...........................................................33
6.3 重新指定Wdm1Test 工程的setupapi.lib的路径 .......................................................35
6.4 类型DWORD_PTR和ULONG_PTR没定义的错误.................................................................36
6.4 调试WdmTest工程...........................................................................................................37
6.4.1 设置断点.............................................................................................................37
6.4.2 单步执行.............................................................................................................38
6.4.3 SYS目录下驱动程序代码对照:.......................................................................40
6.4.4 EXE中继续往下执行ReadFile/WriteFile .......................................................40
6.4.4.1 执行ReadFile的情况.............................................................................40
6.4.4.2 执行WriteFile的情况...........................................................................42
6.4.5 其他的请自己执行..............................................................................................43
第七章 启用wdm1 驱动程序..........................................................................................................44
第八章 停用wdm1 驱动程序..........................................................................................................45
8.1 点击“我的电脑” –〉“属性” –〉“硬件” .........................................................45
8.2 点击 “设备管理器”并展开其他设备.......................................................................45
第九章 还有更好的DebugView.exe .............................................................................................47
9.1 得到DebugView.exe .........................................................................................................47
9.2 原理..................................................................................................................................48
9.2.1 DBG.......................................................................................................................48
9.2.2 DbgPrint().........................................................................................................48
9.2.3 如何使用DbgPrint() ........................................................................................48
9.2.4 修改wdm1 工程的例子........................................................................................48
9.3 如何使用DebugView.......................................................................................................48
第十章 USB驱动程序的设计详细.................................................................................................50
10.1 工作忙待续:请注意关注.............................................................................................50
第十一章 PCI驱动设计详细.........................................................................................................51
11.1 工作忙待续:请注意关注............................................................................................51
www.icwin.net icwin@icwin.net, sales@icwin.net
Windows WDM 驱动开发
WWW.ICWIN.NET
E-mail: sales@icwin.net
, icwin@icwin.net
5
我
们的技术是您的!
Write by Wyouken
&
O4icwin
序言
驱动开发是多数程序员的梦想,但是,由于硬件条件和工作环境的限制,很多朋友都没
能真正的安下心来写一个驱动。
80 年代以前的程序员们个个身怀绝技,软硬兼通,从最顶层的应用到最底层的 IO 控制
都可能是一个人实现的。正是他们那种需要高智商和高投入的工作让很多人都不能挤进他们
的行业,所以程序员的名声就由他们打响的。
面向对象的编程让我们开发程序变得容易,程序员越来越多,工作的压力越来越大,让
人们随时都有危机感。所以一部分人开始转向嵌入式开发,硬件逻辑设计等等方面。
现在由几颗芯片加起来就是产品的功能非常的有限,模块化的设计思想和用户多元化的
需求让开发商们不得不做出更多接口丰富的产品。
驱动开发让很多人感觉复杂,望而生畏,其实只要你只要用心的去做,掌握驱动开发的
方法与技巧,您就能感觉到:驱动程序的开发其实跟开发普通应用程序一样简单容易。
实践出真知,我们写这篇文章的目的很简单,也没有利益的驱动,我们只是将我们学习
驱动的经历浅薄的写出来,只要您是有心人,此文将能最大限度的让您快速入门。
入门后的造化都靠您们自己,我们欢迎大家一起讨论和进步。
如果您有好的文章或建议,请 Email 给我们!
Wyouken, O4icwin
2005-10-13
- 1
- 2
前往页