Windows WDM设备驱动程序开发指南

作者坎特(美)译者:孙义/等主编:陈剑瓯
出版社
出版时间2000-01-01

特色:

ws2000新的驱动程序模型(WDM)。描述了WDM设备驱动程序的结构、功能和开发方法;通过实际的设备驱动程序例子,说明WDM设备驱动程序的实现技术、测试和调试方法;介绍了本书提供的一个调试软件DebugPrint;说明如何在客户驱动程序中使用USB驱动程序接口(USBDI)访问USB设备,以及如何利用HID类驱动程序以标准方法访问多种输入设备。片断:阃ㄐ牛庋渌绦蛴辛艘桓龆ㄒ搴玫慕涌诳梢?br>使用,这使得向USB总线发出请求是相当直接的。源代码兼容与二进制兼容一开始,Micros0ft宣称WDM驱动程序会是Windows98和Windows2000x86之间二进制兼容的,且与Windows2000Alpha平台源代码兼容。但是,现在看来并不能保证二进制兼容,尽管DDK在这方面并不清楚。笔者为了安全起见,仅安装为正确的操作系统构造的驱动程序,也就是说在为Windows98构造驱动程序时,使用Windows98驱动程序开发工具包(DDK),而对Windows2000使用Windows2000DDK。如果使用仅在Windows2000中出现的一些WDM功能,则就不能达到源代码兼容。例如,Windows2000USB系统驱动程序支持一些Windows98驱动程序不可用的功能。下面通过开发一个简单的设备驱动程序,首先讨论WDM的核心功能。然后,讨论必须使用访问内存和处理中断这样的硬件资源的驱动程序。*后,介绍USB和HID系统驱动程序。使用内核例程IoIsWdmVersi0nAvailable确定要求的WDM版本是否可用。DDK头文件定义两个常量WDM_MAJORVERSION和WDM_MINORVERSION,对于Windows98,这些常量是1和0;而对于Windows2000,它们是1和0x10。1.1.1WDM与NT式驱动程序图1-1粗略表示了WDM和NT式驱动程序之间的差别,本书后面的内容将说明这个图中提到的所有功能。这两种驱动程序之间的重叠是相当多的。实际上,写WDM和NT式驱动程序基本上是相同的工作,驱动程序代码中的主要不同是如何创建设备。在WDM驱动程序中,即插即用(PnP)管理器告知何时向系统添加一个设备,或者从系统删除设备。PnP管理器使用安装INF文件查找新设备的正确驱动程序;相反,NT式驱动程序必须发现它自己的设备,通常在它的初始化例程中。NT式驱动程序通常使用专门的安装程序安装。新的总线驱动程序和类驱动程序仅可用于WDM设备驱动程序,新的WDM和NT式驱动程序应支持电源管理和WMI特性。1.1.2可用的驱动程序如果从头开始写一个驱动程序,似乎大多数的代码都与访问设备无关,在执行一些实际的输入输出(I/O)之前,有许多“基础构架”必须设置。本书使用一些实际有用的驱动程序作为例子,会帮助读者尽快入门。一些驱动程序是可以直接使用的,而其他驱动程序形成读者自己的驱动程序的基础。一个虚拟设备驱动程序用于解释核心的WDM功能。虚拟设备不使用任何实际的硬件。3个驱动程序Wdm1、Wdm2和Wdm3逐渐实现更多的功能。一开始,它们提供一个共享内存缓冲区,使得它们形成其他有用驱动程序的基础。实际上,Wdm2驱动程序就被用作本书其他几个驱动程序的基础,包括使用系统驱动程序的驱动程序。在本书中,DebugPrint软件用于提供驱动程序的跟踪调试输出。DebugPrint驱动程序将在第4章中介绍。读者可以在自己的设备驱动程序中使用DebugPrint。WdmI0和PHDI0是通用驱动程序,可以马上用于提供对简单硬件设备的访问,一个控制Win32程序可以使用一组简单但功能很强的命令与硬件对话。这些驱动程序支持中断驱动的I/O。应用程序例子说明这些通用驱动程序如何用于访问并行端口。UsbKbd和HidKbd驱动程序都访问连接到USB总线的键盘,这些驱动程序说明使用USB和HID类驱动程序要求的技术。*后,Win32应用程序HidKbdUser说明用户态应用程序如何发现和访问HID设备。1.1.3本书配套光盘本书配套的光盘含有前面提到的所有驱动程序,包括这些驱动程序的全部源代码和编译好的可执行文件。每个驱动程序至少有一个测试程序,用于测试驱动程序。另外,本书还有一些有用的Win32实用程序,用于辅助驱动程序的开发。第4章有安装本书配套光盘上软件的完整指令。大多数的测试Win32程序是控制台应用程序,使它们很容易写和理解;没有必要让这些代码成为成熟的窗口式或MFC应用程序。为了充分利用本书,应该安装全部驱动程序例子并运行Win32测试程序,所有的驱动程序都包括跟踪调试语句,如果安装了DebugPrint软件,则可以在DebugPrintM0nitor应用程序中看到跟踪输出。仔细检查每个例子的源代码是非常有用的,在实际工作中,一个人只有通过写实际的代码才能学会编程。可以使用这些驱动程序例子作为起点并增加一些功能来进一步掌握设备驱动程序的编写。1.1.4设备驱动程序软件工具有两类软件可用于帮助设备驱动程序的开发,如表1-1所示。驱动程序类是源代码C++类包装程序,提供驱动程序需要的大多数缺省功能;通用驱动程序可以从用户态访问许多类型的设备。OSR公司有一个叫做OSRDDK的调试辅助工具。

推荐

车牌查询
桂ICP备20004708号-3