设为首页 收藏本站
查看: 1453|回复: 0

[经验分享] 从零开始学习Windows WDF驱动程序开发

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-16 09:00:08 | 显示全部楼层 |阅读模式
从零开始学习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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-151799-1-1.html 上篇帖子: 在windows下批量建文件,文件夹,提取当前目录的文件名到文件 下篇帖子: 运行此安装程序之前,必须安装 32 位 Windows 映像处理组件(WIC)解决办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表