菜单

竹林蹊径:深远浅出Windows驱动开发

2019年2月4日 - www6165com

 

WDF驱动程序包蕴多个序列,一个是内核级的,称为KMDF(Kernel-Mode Driver
Framework),为SYS
文本;另一个是用户级的,称为UMDF(User-Mode
Driver Framework),为DLL文件。

Windows的驱动开发模型

 

Windows驱动程序入门:

  在Windows的不等版本上支付的驱动程序
“模型”(模型这几个词语应该来自单词“Mode”。在Win
dowsNT上,驱动程序被叫做KernelDriverMode驱动程序。
作者认为那个Mode是指一种驱动程序的布局和
运转的正儿八经),有过区其余称呼。比如在Windows9x上的驱动程序,都叫作VXD,而在WindowsNT上的驱动
程序被称为KDM驱动程序,Windows98~2000这些时代出现的新模型叫做WDM。
  Windows的驱动模型概念,本来是就驱动程序的作为而言的。比如WDM驱动,必必要满意提供n种被要
求的特性(如电源管理、即插即用)才被称作”WDM驱动”。固然不提供那个成效,那么统一称为NT式驱动。
一致的,WDF驱动也有它的一名目繁多专业。
  不过本书接纳简单的区分方法。将整个在Windows2000~WindowsVista下能健康运转且未调用WDF相
关的内核API函数的驱动都叫作传统型驱动(包罗NT式和WDM)。若是调用了WDF相关的内核API则号称WD
F驱动。
  请小心:WDF驱动是可以调用传统型驱动所调用的内核API的,WDF可以视为传统型的升级版。
  模型的向上并不是和操作系统版本的升迁齐步走的,而是有一个日渐取代的进度。比如Windows98已
经支持部分的WDM驱动程序,不过又支持部分的VXD驱动。而到了Windows2000,则VXD那种驱动程序完
全被淘汰了。KDM则是WDM的前身。WDM是在KDM的基础上平添了部分新的特征,制定了有些新的正式而造
就的。绝大部分函数调用都是通用的。当然,Windows9x系列的基本完全两样,所以VXD与之相比较,就没
有一个内核API函数是一律的。
  故而随着Windows9x的打入冷宫,VXD难逃彻底被淘汰的造化。WindowsNT则发展成了后来的Windows版本
,KDM也改为了WDM而存在下去。当然,微软不会闲着,现在又推出了新的WDF。读者又不得不担心:本书
是用WDM写的依旧用WDF写的呢?会不会刚刚学完又被淘汰呢?
  和VXD分裂,从KDM到WDM再到WDF是一脉相通的,基本上KDM程序员在求学WDM时曾经占尽了便民。到
WDF也不例外,WDF与其说是新的驱动开发模型,还不如说是在已部分内核API和数据结构的功底上,又封
装出一套让使用者觉得更简约、更易用的以Wdf-开首的一组API。由此,读者大可不必担心WDF的前行会
让前面学习传统型驱动的竭力一噎止餐。一个非凡的例子是:大致在1991年到1992年间揭橥首个版本的
硬盘上层过滤diskperf的代码,18年过去了,前日还是可以够编译并正常在风行版本的Vista上运行。
  本书对于一大半无法找到WDF实例的章节,都选取了传统型驱动进行认证。比如磁盘过滤、文件系统
过滤和网络中间层驱动。其余为了从不难入手,对于入门级的多少个例证(串口和键盘)也选拔了传统型
使得。可是虚拟磁盘和编造网卡(第5章和第11章),使用了WDF版本的例子,请读者注意鉴别。

 

本条意见既适用于接纳软件程序员,也适用于系统软件程序员。对于利用软件程序员,低层的运用开发平台是支撑应用开发的基本功,譬如,基于Windows
SDK来开发Windows应用程序。那么,程序员有必要驾驭Windows
SDK中的基本要素,诸如音讯分发机制、各类图片效能等。在那种景况下,阅读一些天下无双的事例程序代码往往能起到火速引领入门的效应。同样地,C/C++程序员倘使局限于C/C++语言本身,很难编写出高质量的实用程序。他们非但要控制C/C++运行库中函数和花色的用法,甚至还要理解那个函数和档次的落到实处机理。即便源代码层面上的库,例如STL(C++的科班模板库),也要求知道其代码完结才能灵活自如地用好那些库(比如STL中的各类容器数据结构、迭代器或算法)。

   1.  前言

 

   
在Windows的分裂版本上开发的驱动程序“模型”(模型这一个词语应该来自单词“Mode”。在Windows
NT上,驱动程序被誉为Kernel Driver
Mode驱动程序。作者以为那些Mode是指一种驱动程序的布局和周转的正规),有过不一致的名称。比如在Windows
9x上的驱动程序,都称为VXD,而在Windows
NT上的驱动程序被称为KDM驱动程序,Windows
98~2000这些期间现身的新模型叫做WDM。
   
Windows的驱动模型概念,本来是就驱动程序的一颦一笑而言的。比如WDM驱动,必要求满意提供n种被要求的性状(如电源管理、即插即用)才被称作WDM驱动。即使不提供这么些功效,那么统一称为NT式驱动。同样的,WDF驱动也有它的一文山会海正式。
    不过本书选取简便易行的区分方法。将全体在Windows 2000~Windows
Vista下能健康运转且未调用WDF相关的内核API函数的驱动都号称传统型驱动(包涵NT式和WDM)。要是调用了WDF相关的内核API则名为WDF驱动。
请小心:WDF驱动是可以调用传统型驱动所调用的内核API的,WDF可以算得传统型的升级版。
   
模型的进化并不是和操作系统版本的升迁齐步走的,而是有一个逐年取代的历程。比如Windows
98已经支撑部分的WDM驱动程序,可是又扶助部分的VXD驱动。而到了Windows
2000,则VXD那种驱动程序完全被淘汰了。KDM则是WDM的前身。WDM是在KDM的根底上加码了一部分新的特色,制定了一些新的正式而作育的。绝半数以上函数调用都是通用的。当然,Windows
9x种类的水源完全两样,所以VXD与之相比较,就没有一个内核API函数是相同的。
    故而随着Windows 9x的打入冷宫,VXD难逃彻底被淘汰的运气。Windows
NT则发展成了新生的Windows版本,KDM也化为了WDM而存在下去。当然,微软不会闲着,现在又推出了新的WDF。读者又不得不担心:本书是用WDM写的如故用WDF写的吧?会不会刚刚学完又被淘汰呢?
   
和VXD差别,从KDM到WDM再到WDF是一脉相传的,基本上KDM程序员在攻读WDM时一度占尽了方便。到WDF也不例外,WDF与其说是新的驱动开发模型,还不如说是在已有的内核API和数据结构的功底上,又包装出一套让使用者觉得更简约、更易用的以Wdf-初步的一组API。由此,读者大可不必担心WDF的开拓进取会让后边学习传统型驱动的着力半涂而废。一个突出的例证是:几乎在1991年到1992年间公布第三个版本的硬盘上层过滤diskperf的代码,18年过去了,今日依然得以编译并正常在新型版本的Vista上运行。
   
本书对于一大半不可以找到WDF实例的章节,都选用了传统型驱动举办认证。比如磁盘过滤、文件系统过滤和网络中间层驱动。别的为了从简单出手,对于入门级的四个例子(串口和键盘)也利用了传统型驱动。可是虚拟磁盘和编造网卡(第5章和第11章),使用了WDF版本的例子,请读者注意识别。

剩下的片段章节,分别是有关驱动入门(第1、2章)、Windbg调试命令(第8章)、内核同步(第9章)等情节。

Visual Studio +
WDK(Windows Driver Kit)

windows服务在系统启动是加载,用户需在劳务控制平台开启或者关闭服务
Driver 瑟维斯是劳务的一个特例,遵守windows服务的商谈
加载和谐在NT驱动分为多个步骤:
1.为NT驱动成立新的劳务
2.开启此项服务
3.关闭此项服务
4.刨除NT驱动创设的劳务
以上多个步骤都是经过SCM组建的服务来落实的。

16开

   4.  实现方式

WDM 是 Win32设备驱动程序种类布局

Windows内核驱动程序与根本的一体关联性使得驱动程序的调节极为不便于,从某种意义上讲,驱动程序的调剂等同于Windows内核的调剂。而且,对于一些特定的逻辑错误,内核调试器甚至是力不从心的。正因为这些缘故,内核驱动程序的代码尽可能精简,从软件设计角度而言,应最大程度地把效率代码放到应用程序中,在驱动程序中只留下最须要的功用逻辑。那样的宏图也得以使Windows内核被不得法驱动程序代码牵连而导致稳定性难点的几率相对收缩。

里面WDK必要协调手动下载安装

劳务控制管理程序 SCM
恍如于linux的护理进度(在linux或者unix操作系统中在系统的指点的时候会敞开很多劳动,这几个服务
就叫做守护进度)

驱网主题技术丛书

 

 

潘爱民

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图