|
从零开始学习Windows WDF驱动程序开发
http://www.flatws.cn/article/program/shell/2011-04-27/22965.html[电子达人] 从零开始学习Windows WDF驱动程序开发
摘要:本文通过简单的例子和精简的说明,带你快速了解和掌握基于WDF架构的Windows驱动程序的开发过程。WDF自带的文档非常详细而且冗长,读者需要一定的编程基础和英语水平,再加上一定的努力,才能看明白。而在网络上,写得既简单又清楚还具有操作性的资料几乎没有。本文就是一篇简洁明了并且有实际操作的教程,节约你宝贵的时间和脑细胞。即便你是从来没有接触过Window下面驱动程序开发的新手,也能让你快速建立起WDF开发的概念,顺利进入实际的Windows驱动程序项目开发中。
声明:本文是电子达人的原创文章,版权归电子达人所有。您可以转载,但是不能修改文章的内容。
电子达人网址:
http://blog.csdn.net/sjsj
QQ : 1759120331
Email: 1759120331@qq.com
目录:
1. 第一部分 编译安装测试一个简单的WDF驱动程序
1.1 编译安装测试
1.2 Windows驱动开发就是要开发出INF文件和SYS文件
1.3 简单介绍下编译脚本
1.4 Windows应用程序如何访问一个设备
2. 第二部分 了解WDF框架并且开发WDF驱动程序
2.1 驱动程序的加载
2.2 系统检测到新硬件的时候干些什么?
2.3 WDF中读写和控制设备
3. 第三部分 后记
第一部分 编译安装并且测试一个简单的WDF驱动程序。
对于初学者,我们需要一个简单的例子,就和C语言里面的HelloWorld一样,编译运行,接着打印出"Hello world!"。我们要先建立起对WDF驱动的一个初步而强烈的感性认识,然后再对照着例子来学习WDF的概念,看它的代码是怎么实现的,这样就会有深刻的认识。这就是教育学上所谓的循序渐进。按照这个思路,我们就先要编译安装运行一个简单驱动程序例子。我浏览了下WDF的例子之后,发现Echo这个例子比较适合我们的这个思路。下面就开始编译、安装和运行Echo这个例子。我是在XP下面做的实验,如果在其他操作系统下,也类似。在开始试验之前,读者可以从微软的网站下载WDK开发包,大小约700Mbytes,需要耐心地下才能下完。下文中,如果读者不知道我说的文件或程序在哪个目录下面,请搜索下,我尽量说详细些。
1.1 编译安装测试
(1) 编译Echo这个WDF例子。
在开始菜单中选择X86 Free Build Environment。
命令行界面出现之后,用cd切换到/WinDDK/7600.16385.1/src/general/echo/kmdf目录下。
命令行里面运行,"build -ceZ"。
可以看到生成了echo.inf, echo.sys这两个文件。后面安装驱动程序的时候要用到它俩。
编译完毕。
(2) 安装。
拷贝devcon.exe, WdfCoInstaller01009.dll, echo.inf, echo.sys四个文件到同一个目录下。
在命令行下进入该目录并运行,devcon.exe install echo.inf "root/echo"
命令行中出现"Driver installed successfully"。
安装完毕。
(3) 察看。
在"我的电脑"->右键"属性"->"硬件"->"设备管理器"里面,可以看见Sample Device已经安装好了。如图,因为我安装了2次,所有这里有两个Sample WDF ECHO Driver。如果安装3次,就有3个。
http://www.flatws.cn/d/file/article/program/shell/2011-04-27/1ad8ca33eecdeb7e6ec12562718c8198.gif
(4) 试验。
在开始菜单中选择X86 Free Build Environment。
在命令行中用cd切换到D:/WinDDK/7600.16385.1/src/general/echo/exe目录下面。
在命令行中运行, "build -ceZ"。
再cd到D:/WinDDK/7600.16385.1/src/general/echo/exe/objfre_wxp_x86/i386下面。
在命令行中运行, "echoapp.exe"。出现下面的图就说明,程序正确工作了。
http://www.flatws.cn/d/file/article/program/shell/2011-04-27/0c8d57d4bc4355ea97dc24dddcf62cd8.gif
使用上述的步骤,可以编译和安装大部分的WDF驱动例子。WDK中提供的这些WDF例子可以作为我们开发驱动程序的原始代码。
1.2 Windows驱动开发就是要开发出INF文件和SYS文件
实验之后,读者可能会问几个问题devcon.exe, WdfCoInstaller01009.dll, echo.inf, echo.sys是分别用来做什么用的?答案如下。
echo.sys文件是真正的驱动程序,是一个DLL文件,但是以sys作为文件后缀名。
echo.inf文件是一个存放着安装信息的文本文件。由Windows的SetupAPI调用echo.inf里面的内建命令和配置信息,完成安装过程。过程有点类似于shell程序调用脚本运行。
WdfCoInstaller01009.dll是Co-Installer, 用于协助安装的程序,以dll的形式提供。
devcon.exe是一个命令行工具,可以用来显示设备信息、寻找设备、安装和改动设备、重启电脑等。
devcon.exe和WdfCoInstaller01009.dll是WDK自带的,而echo.inf和echo.sys是需要驱动程序开发者提供的。你要为某个设备开发一个驱动程序,那你最终提供的就是inf和sys文件。所以掌握了inf文件和sys文件的写法,就掌握了驱动程序的开发方法。sys文件的开发实际上就是驱动程序本身的开发,这是本文重点,所以在后面详述。而inf文件,很多应用程序安装的时候也会用到,有兴趣的读者可以在网上google下,有很多中文资料;WDF文档中也有描述和很多例子,所以我在这里不对其展开介绍。(后面如果有时间,我可能会写一篇关于inf的介绍性文章)。读者要知道,安装驱动程序一定是需要inf文件的。
1.3 简单介绍下编译脚本
既然要编译程序,就要涉及到编译器和其相关的工程文件。WDK使用Build程序来编译。Build程序要使用makefile和sources文件。用户没有必要从自己写一个makefile和sources,因为WDF例子里面就有很多现成脚本,可以用作参考,改改就能用。
从KMDF的echo例子可以看到,makefile如果不是特别需要的话,就不需要改了。而Sources文件里面的几个地方需要改下。
TARGETNAME=echo |
|