标题：Windows设备驱动程序WDF开发
图书信息
作　者：武安河 编著  出 版 社： 电子工业出版社
出版时间： 2009-4-1
页　数：364页
开　本： 16开
I S B N ： 9787121084393
分类： 图书[1] >> 计算机>>Windows
定价：￥49.00元（含光盘1张）
内容简介
Windows最新的WDF驱动程序框架，包括KMDF和UMDF，KMDF是WDM的继续。本书主要介绍KMDF设备驱动程序的原理及编程方法；详细介绍KMDF对象及程序基本框架，KMDF和应用程序之间的通信、即插即用和电源管理的编程技术，过滤器驱动程序，KMDF访问硬件设备、处理硬件中断、实现DMA操作的编程技术，以及USB接口和PCI接口设备驱动程序KMDF的开发。还对UMDF设备驱动程序作了编程入门介绍。
前言
Windows设备驱动程序，过去是WDM（Windows Driver Model）框架，编程复杂，初学者难以掌握其编程要领。为了解决这一问题，微软对WDM驱动程序的架构做了改进，形成了全新的WDF（Windows Driver Foundation）框架结构。它提供了面向对象和事件驱动的驱动程序开发框架，大大降低了开发难度。从现在开始，掌握Windows设备驱动程序的开发人员，由过去的“专业”人士，将变为“普通”大众。
WDF驱动程序包括两个类型，一个是内核级的，称为KMDF（Kernel-Mode Driver Framework），为SYS文件；另一个是用户级的，称为UMDF（User-Mode Driver Framework），为DLL文件。
内核模式驱动程序：这类驱动程序作为内核模式操作系统组件的一部分执行，它们管理I/O、即插即用、内存、进程和线程、安全等。内核模式驱动程序通常为分层结构。
用户模式驱动程序：这类驱动程序通常提供 Win32 应用程序与内核模式驱动程序或其他操作系统组件之间的接口。用户模式驱动程序支持基于协议或基于串行总线（如摄像机和便携音乐播放器）的设备。
WDF的运行平台有：Microsoft Windows Server® 2008、Microsoft Windows Vista、Microsoft Windows Server® 2003、Microsoft Windows XP、Microsoft Windows 2000 (KMDF only)。
本书内容
本书主要讨论KMDF，KMDF是WDM的继续，可以把WDM驱动程序转换为KMDF驱动程序。还对UMDF设备驱动程序作了编程入门介绍。
过去，我研究过如何用DriverStudio开发工具开发Windows下的WDM设备驱动程序，承蒙电子工业出版社的厚爱，出版了《Windows 2000/XP WDM设备驱动程序开发》一书。
WDF的简单化编程，导致DriverStudio退出了Windows设备驱动程序的开发，将DriverStudio定格在3.2版本。
从形式上看，KMDF的对象和DriverStudio的类，具有相似的地方。本书的内容安排和《Windows 2000/XP WDM设备驱动程序开发》的基本一致，具体安排如下：
章 名 主 要 内 容
第1章 Windows 2000和WDM驱动程序 KMDF是WDM的继续，KMDF构建在WDM之上。对于一些Windows驱动程序的基本概念，初学者仍需要了解，如Windows 2000中的组件、驱动程序种类，以及WDM驱动程序特点等
第2章 KMDF驱动程序框架 KMDF驱动程序框架由对象和事件回调例程构成。KMDF框架中所有的事物都由对象来表示，各种事件处理都由事件回调例程来完成。学习KMDF编程，主要是学习KMDF的各种对象、对象函数和事件回调例程的编程
第3章 基本对象 KMDF提供了许多对象，本章只介绍一些基本的对象，如WDFREQUEST对象、WDFQUEUE对象等，还介绍了数据同步访问、字符串操作和QueueSample实例
第4章 KMDF驱动程序编程入门 介绍Windows Vista下的KMDF驱动程序编程入门，包括KMDF驱动程序编程环境的建立，KMDF的创建、生成及安装过程，以及Win32 Console和MFC两种应用程序的编程
第5章 KMDF驱动程序和应用程序之间的通信 介绍应用程序与KMDF之间的通信，包括应用程序对KMDF的通信，以及KMDF对应用程序的通信
第6章 即插即用例程 主要介绍PnP组件、即插即用例程的加载和卸载顺序及PnpPowerSample实例等
第7章 电源管理 主要介绍系统电源状态与设备电源状态、电源管理控制标志位、设备的唤醒特征和空闲检测、电源管理编程及IdleSample实例等
第8章 KMDF过滤器驱动程序 描述如何写一个过滤器驱动程序，该驱动程序可位于功能驱动程序的上面或下面，它通过过滤流经它的IRP来修改设备的行为
第9章 USB设备开发 主要介绍USB设备的配置/接口/端点、USB数据的传输方式、USB描述符、USB编程对象、USB编程（如激活配置与中止配置、同步操作、异步操作）及USBSample实例等
第10章 PCI设备驱动程序开发 本章就硬件访问、中断处理和DMA传输3个方面展开讨论，并以CY7C09449芯片为例，给出一个经过测试的PCI设备驱动程序实例——PCISample实例。另外，还给出了一个不依靠硬件设备的DMASample实例
第11章 UMDF驱动程序编程入门 介绍UMDF驱动程序编程入门，包括UMDF驱动程序的创建、生成及安装，以及一个简单的实例编程
第12章 WinDbg使用介绍 WinDbg是微软提供的一个功能非常强大的调试软件，可以在源代码级别调试Windows下的WDF驱动程序。本章主要介绍用WinDbg调试KMDF和UMDF
微软推荐的WDF书籍是《Developing Drivers with the Microsoft Windows Driver Foundation》，作者是Penny Orwick和Guy Smith。
微软提供的学习WDF的中文网站地址是：www. microsoft. com/china/whdc。
开发工具
微软提供的WDF驱动程序开发工具包WDK的最新版本是WDK 1.7，可以从其网站下载。
本书实现WDF驱动程序及应用程序实例所用的工具是：Visual C++ 6.0和WDK 1.7。
本书配套光盘
本书配套光盘中含有书中所有实例的驱动程序和应用程序的全部源代码，以及生成的驱动程序和可执行的应用程序。除USBSample和PCISample实例因需要硬件设备的支持，读者无法运行外，其他11个实例均可在Windows XP和Vista下运行。
本书特点
编程入门：详细的步骤介绍，初学者的良师益友。
应用实例：对程序作了必要的注释，了解驱动程序编程的捷径。
简单实用：KMDF的编程非常简单，Winows硬件开发工程师必须掌握。
理解深刻：笔者精通Winows设备驱动程序开发和硬件开发，所有实例均为自己创造，每个实例都有其独特意义，笔者用实例诠释自己对KMDF的理解和认识。
微软推荐的WDF书籍是“理论派”，以讲解理论为主，讲得非常详细和全面；本书是“实战派”，全书以实例为主，用实例带你快速入门。
善于学习，勤于思考，勇于实践。用这句话与投身硬件开发的青年学子共勉。
希望这本书能对您现在或将来的工作有所帮助。
本书得以顺利出版，要特别感谢周利莉的一贯支持；感谢何海洋和赵庆花的支持；感谢陈建波和何亚垒的支持；感谢朱沭红编辑和电子工业出版社。
由于作者的理论水平有限，书中难免出现差错和遗漏，敬请广大计算机应用开发人员批评指正，
十年时间，跟踪Windows设备驱动程序的开发，驱动程序VxD->WDM->KMDF，工具VtoolsD->DDK、DriverWorks->WDK，但愿WDF长久。别了WDM，别了DriverStudio。
缺月挂疏桐，漏断人初静。谁见幽人独往来，缥缈孤鸿影。……
武安河 
2009年元旦
目录
第1章 Windows 2000和WDM驱动程序 1
1.1 Windows 2000组件概述 1
1.2 Windows 2000中的驱动程序种类 3
1.3 WDM驱动程序特点 4
1.2.1 内核模式驱动程序的设计目标 4
1.3.2 WDM驱动程序模型 7
1.3.3 设备和驱动程序的层次结构 8
1.3.4 中断级别IRQL 9
1.3.5 设备接口 10
第2章 KMDF驱动程序框架 12
2.1 KMDF对象 12
2.1.1 对象概念 12
2.1.2 基本对象 17
2.2 KMDF程序结构 18
2.2.1 DriverEntry例程 19
2.2.2 EvtDriverDeviceAdd例程 22
2.2.3 I/O处理例程 25
2.2.4 即插即用和电源管理例程 30
2.3 CharSample实例 30
第3章 基本对象 32
3.1 WDFREQUEST对象 32
3.1.1 WDFREQUEST对象函数 32
3.1.2 I/O请求基本操作 38
3.2 WDFQUEUE对象 44
3.2.1 WDFQUEUE对象函数 46
3.2.2 队列编程 48
3.3 WDFTIMER对象 50
3.4 WDFDPC对象 52
3.5 WDFWORKITEM对象 53
3.6 WDFMEMORY对象 55
3.7 数据同步访问 56
3.7.1 WDFSPINLOCK对象 57
3.7.2 WDFWAITLOCK对象 58
3.8 字符串操作 58
3.8.1 字符串格式 58
3.8.2 WDFSTRING对象 59
3.8.3 串处理函数 60
3.9 QueueSample实例 61
第4章 KMDF驱动程序编程入门 70
4.1 建立KMDF编程环境 70
4.2 创建KMDF驱动程序 71
4.3 生成KMDF驱动程序 72
4.4 安装KMDF驱动程序 73
4.5 RegSample实例 78
4.5.1 RegSample驱动程序 78
4.5.2 Win32 Console应用程序 92
4.5.3 MFC应用程序 98
4.6 调试说明 103
第5章 KMDF驱动程序和应用程序之间的通信 104
5.1 应用程序对驱动程序的通信 104
5.1.1 打开设备 105
5.1.2 关闭设备 106
5.1.3 DeviceIoControl函数调用 106
5.1.4 ReadFile和WriteFile函数调用 111
5.1.5 IOSample实例 112
5.2 驱动程序对应用程序的通信 116
5.2.1 DeviceIoControl异步完成 116
5.2.2 WIN32事件通知 117
5.3 驱动程序对应用程序通信实例 119
5.3.1 异步完成实例CancelSample 120
5.3.2 事件通知实例EventSample 130
第6章 即插即用例程 145
6.1 即插即用简介 145
6.1.1 PnP组件 145
6.1.2 即插即用例程 146
6.1.3 例程的加载和卸载顺序 150
6.2 PnpPowerSample实例 152
第7章 电源管理 160
7.1 电源管理简介 160
7.1.1 系统电源状态与设备电源状态 160
7.1.2 电源管理控制标志位 162
7.1.3 设备的唤醒特征和空闲检测 163
7.2 电源管理编程 163
7.2.1 电源管理基本例程 164
7.2.2 设备唤醒 164
7.2.3 空闲检测 166
7.3 IdleSample实例 168
第8章 KMDF过滤器驱动程序 174
8.1 KMDF过滤器驱动程序的编程 175
8.2 KMDF过滤器驱动程序安装 176
8.3 FilterSample实例 177
第9章 USB设备开发 188
9.1 USB接口概述 188
9.1.1 USB设备的配置、接口和端点 189
9.1.2 USB数据的传输方式 192
9.1.3 USB描述符 199
9.1.4 标准设备请求 207
9.2 USB编程对象 210
9.2.1 WDFUSBDEVICE对象 210
9.2.2 WDFUSBINTERFACE对象 215
9.2.3 WDFUSBPIPE对象 218
9.3 USB编程 222
9.3.1 激活配置与中止配置 222
9.3.2 同步操作 224
9.3.3 异步操作 225
9.4 USBSample实例 227
第10章 PCI设备驱动程序开发 244
10.1 硬件访问 245
10.1.1 I/O访问 245
10.1.2 存储器访问 248
10.1.3 硬件访问编程 251
10.2 中断处理 254
10.2.1 WDFINTERRUPT对象 254
10.2.2 中断处理编程 257
10.3 DMA传输 258
10.3.1 DMA编程对象 258
10.3.2 DMA传输编程 267
10.4 PCISample实例 268
10.5 DMASample实例 279
第11章 UMDF驱动程序编程入门 297
11.1 UMDF编程环境 297
11.2 创建UMDF驱动程序 297
11.3 生成UMDF驱动程序 299
11.4 安装UMDF驱动程序 299
11.5 UMDFSample实例 302
11.5.1 驱动程序 302
11.5.2 Win32 Console应用程序 339
第12章 WinDbg使用介绍 340
12.1 用WinDbg调试KMDF 340
12.1.1 目标机的设置 341
12.1.2 主控机的路径设置 343
12.1.3 建立连接 343
12.1.4 加载符号文件 344
12.1.5 设置断点 345
12.1.6 断点执行 346
12.1.7 下载符号包 347
12.2 用WinDbg调试UMDF 348
12.2.1 路径设置 348
12.2.2 链接进程 348
12.2.3 设置断点 349
12.2.4 使能UMDF加载和初始化代码调试 350
参考文献 351