驱动开发经典书,看了有很大收获
第一部分 开始WDF之旅
第一章 WDF简介
(本章无实质内容,故省略。若有兴趣请参见原文。)
第二章 Windows Driver Fundamentals
概述
这一章是针对从未有过Windows驱动开发经验的开发人员。本章提供了Windows操作系统内核的基本的背景知识,以及驱动如何在此环境中工作。本章也可以作为对编写核心态程序的介绍。
如果你是Windows驱动编程的新手,请阅读这一章里的概念和技术,这将是理解本书中所讨论的话题的基础。如果你有驱动开发的经验,请先查看本书最后的“基础词汇”。若你对这些术语和概念都很熟悉,请直接跳过这一章。
驱动是什么?
从设计上说,Windowss内核并不直接与设备打交道。检测设备,在设备与Windows内核间通信,以及向客户端-诸如应用程序-开放设备功能,都要依赖设备驱动。Windows提供了虚拟设备以支持接口,称为设备模型。驱动开发人员的任务就是实现接口以支持设备的需求。
更具体的说,驱动通常的目的是处理应用程序和设备间的通信。驱动和服务在很多方面相似。例如,驱动:
1. 在后台运行,与应用程序进程分离,且可以被多用户访问。
2. 长期生存。驱动有和设备一样的生存期。Windows发现设备时驱动就开始运行,设备被移除时驱动被关掉。
3. 响应外界生成的I/O请求。这些请求通常由应用程序,Windows或其他驱动生成。
4. 没有用户界面。用户与驱动打交道,通常是直接通过生成这个I/O请求的应用程序。
5. 运行在和生成I/O请求的应用程序不同的地址空间。
驱动在一些重要方面和服务不同。它们:
1. 通过专门的程序接口-称为DDI-与系统内核服务以及设备通信。
2. 基于WindowsI/O模型,这与服务和应用程序使用的模型完全不同。
3. 可以直接与核心态的组件通信。核心态的驱动完全运行在核心态。而UMDF驱动想要与设备交换数据的话,必需通过在它下层的核心态驱动。
本章概念性地描述了驱动怎样在Windows操作系统中存在,以及怎样管理客户端与设备之间的请求流程。虽然本书是关于WDF的,但是本章主要关注于老的WDM,它是基于Windows内核直接开放的DDI的。WDM非常灵活,但是软件开发人员却认为用WDM开发驱动是一项具有挑战性的工作。不管怎样,对WDM有一个基本的了解是很重要的:
1. 从设计上,WDF取代WDM作为Windows主要的驱动模型,是通过提供在WDM之上的一个虚拟层;WDM仍在后台工作。要了解WDF,你必需了解WDM的一些基本概念。
2. 从概念的层次上来说,WDF和WDM有着相似的结构,以及很多相同的处理I/O请求的方式。本章大多数的讨论都适用于WDM和WDF驱动,虽然实现的细节上有所不同。
本章关注于核心态驱动以及编程技术,因为所有的驱动开发人员应该对核心态的概念有基本的了解。关注用户态驱动的开发人员仍然会从了解核心态的基本概念中获益。例如,UMDF驱动的结构和WDM或WDF驱动相似,WMDF驱动处理I/O请求的很多方式也和核心态驱动相同。
1