Windows WDM 驱动程序
WDM驱动程序的基本结构”解释了Windows 2000用于管理I/O设备的基本数据结构,以及驱动程序与这些数据结构相联系的基本方式。我将讨论驱动程序对象和设备对象。还将讨论两个基本例程:DriverEntry和AddDevice,每个WDM驱动程序“容器”都包含这两个例程。
第三章,“基本编程技术”描述了一些最重要的服务函数,你可以调用这些函数来完成普通的编程工作。我还将讨论错误处理、内存管理,和其它一些编程技术。
第四章,“同步”讨论驱动程序怎样在多任务和多处理器的环境中同步访问共享数据,你将详细地学习IRQL,学习用操作系统提供的各种同步原语解决同步问题。
第五章,“I/O请求包”是本书的真正主题。我将解释I/O请求包从哪来,讨论IRP处理的“标准模型”。另外,我还将讨论一个更复杂的题目:IRP取消,它涉及到同步问题。
第六章,“即插即用”仅涉及到一种类型的I/O请求包,即IRP_MJ_PNP。PnP管理器通过发送这种IRP来报告设备的配置,并在设备存在期间向驱动程序通知重要事件。多数设计良好的PnP驱动程序不能使用“标准模型”来处理IRP。所以,我描述了一个名为DEVQUEUE的对象,你可以在PnP事件发生时使用它来正确地入队(queue)和出队(dequeue)IRP。
第七章,“读写数据”我们将在这一章里讨论执行I/O操作的驱动程序代码。我将讲述怎样从PnP管理器那里获得配置信息,怎样用这些信息初始化驱动程序,以使它能处理数据读写IRP。我还给出了两个简单的驱动程序例子:一个用于PIO设备,一个用于总线主控的DMA设备。
第八章,“电源管理”描述了驱动程序如何参与电源管理。电源管理颇为复杂。不幸的是,你必须参与系统的电源管理协议,否则整个系统将不能正常工作。
第九章,“专门问题”包含了对过滤器驱动程序、错误登记、I/O控制操作,和系统线程的讨论。
第十章,“Windows管理仪器”涉及一个企业范围的计算机管理方案,你的驱动程序能够并且也应该参与这个方案。我将解释如何为监视程序提供统计数据和性能数据,怎样响应标准的WMI控制,怎样向控制程序报告重要事件的发生。
第十一章,“USB总线”描述怎样写USB设备驱动程序。
第十二章,“安装设备驱动程序”告诉你怎样把驱动程序安装到用户系统中,你将学习INF文件的基本写法,还可以学到关于系统注册表的一些有趣并且有用的东西。
附录A,“Windows 98的不兼容处理”介绍一个基于VxD的方案,该方案允许你在Windows 98和Windows 2000平台上使用相同的驱动程序映像。由于Windows 2000出现在Windows 98之后,它输出了Windows 98没有输出或没有实现的服务例程,我将介绍一个短小的VxD程序,它可以解决这个问题。
附录B,“使用GENERIC.SYS”描述了GENERIC.SYS的公共接口。大部分驱动程序例子使用了这个库。
附录C,“使用WDMWIZ.AWX”描述了如何使用这个应用程序向导来创建一个驱动程序。我再提一下,WDMWIZ.AWX并不是一个商品化的工具包。
1