标题：竹林蹊径：深入浅出windows驱动开发
基本信息
作    者： 张佩 编
出 版 社： 电子工业出版社
ISBN： 9787121125553
出版时间： 2011-03-01
版　　次： 1
页　　数： 506
装　　帧： 平装
开　　本： 16开
所属分类： 图书>计算机与互联网>操作系统
内容简介
《竹林蹊径：深入浅出windows驱动开发》是作者根据多年的工作学习经验，总结的第一手驱动开发资料。但它不是一本深刻到最底层的原理性的书，有这种预期的读者会失望。本书更多的是经验之谈，一些实践中的小发现小意外，颇为书中内容添彩。　　《竹林蹊径：深入浅出windows驱动开发》的特色之一，是对WDF框架做了较多的切入。本书第一个主要内容是（第3～7章）围绕WDF而展开讨论，侧重点各有不同。第3章以框架为讨论的中心；第4、5两章以WDF框架开发USB和1394驱动；第6章讲述内核C++编程，也以WDF框架为蓝本；第7章讲述WDF驱动的测试和调试。　　第二个主要内容是关于音视频驱动开发（第10～11章）。音视频驱动包括AVStream架构，本书做了较详细的阐述。第10章讲述使用AVStream小端口架构，第11章讲述ASIO音频驱动开发。　　第三个主要内容是关于设备驱动安装（第12～14章）。第12章讲系统安装模块，从总体角度阐述系统和设备驱动如何配合完好地进行工作；第13章讲述INF安装文件的细节，包括各个域的作用，以及诸多安装指令的使用。第14章讲如何编写驱动安装软件。　　剩余的一些章节，分别是关于驱动入门（第1、2章）、Windbg调试命令（第8章）、内核同步（第9章）等内容。　　读者对象：本书适合一般入门级内核程序员，对WDF有兴趣，准备开发USB或1394设备驱动者，本书尤其有用。本书对于入行较久，经验丰富的程序员，也具有一定的参考价值。
图书目录
第1章　Hello World驱动
1.1　从Hello World开始
1.1.1　HelloDRIVER
1.1.2　代码解释
1.1.3　驱动程序的编译和安装
1.1.4　查看我们的驱动
1.2　虚拟环境
1.2.1　使用虚拟环境进行驱动开发
1.2.2　使用VMware虚拟机
1.2.3　目标机设置
1.2.4　Virtual PC虚拟机
1.3　小结
第2章　商业驱动开发技术
2.1　建立开发调试环境
2.1.1　SVN环境
2.1.2　创建工程，导入SVN
2.1.3　建立符号服务器
2.1.4　用符号调试
2.2　64位驱动开发技术
2.2.1　64位驱动编写技术
2.2.2　32位应用程序与64位驱动混合模式
2.3　驱动程序的发布与测试
2.3.1　驱动程序签名
2.3.2　驱动程序测试
2.3.3　WHQL
2.4　小结
第3章　WDF概述
3.1　主要特点
3.2　框架视图
3.3　兼容性
3.4　对象模型
3.4.1　对象和句柄
3.4.2　引用计数
3.4.3　上下文空间
3.4.4　PME接口
3.4.5　DDI接口
3.4.6　父子关系
3.4.7　对象同步
3.5　驱动对象和设备对象
3.5.1　驱动对象
3.5.2　驱动入口DriverEntry
3.5.3　设备对象
3.5.4　创建设备对象
3.5.5　设备栈
3.6　IO模型
3.6.1　IO目标对象
3.6.2　IO目标对象的细节
3.6.3　安全的缓冲区
3.6.4　内存对象（一）
3.6.5　内存对象（二）
3.6.6　框架和IO请求
3.6.7　更详细的处理流程
3.6.8　IO请求参数
3.6.9　队列
3.6.10　创建IO请求
3.7　PNP和电源模型
3.8　小结
使用WDF框架开发USB驱动，方便且简单。本章首先总体上从硬件和软件两个方面介绍USB相关知识点，包括设备的电气特性、总线结构、USB驱动类型以及类驱动。编程方面，从USB设备初始化、数据操作以及设备控制等几个方面来讲解，透彻并且翔实。
第4章　WDF USB设备驱动开发
4.1　USB设备硬件结构
4.1.1　主从结构
4.1.2　硬件拓扑
4.1.3　USB中断
4.2　USB软件结构
4.2.1　总线驱动
4.2.2　系统类驱动
4.2.3　功能驱动
4.2.4　父驱动与混合设备
4.2.5　过滤驱动
4.2.6　USB驱动栈、设备栈
4.3　内核开发
4.3.1　设备驱动
4.3.2　入口函数
4.3.3　USB描述符
4.3.4　描述符介绍
4.3.5　汇总举例
4.3.6　读取描述符
4.3.7　初始化
4.3.8　设备初始化函数
4.3.9　创建设备对象
4.3.10　设备命名、符号链接
4.3.11　启动设备
4.3.12　创建队列
4.3.13　停止设备/反初始化
4.4　数据I/O操作
4.4.1　USB控制命令
4.4.2　构造并发送控制命令
4.4.3　读USB中断端口
4.4.4　连续读操作
4.4.5　数据处理函数
4.4.6　中断端口的效率
4.4.7　读/写批量端口
4.5　设备控制
4.5.1　关于I/O Target对象
4.5.2　获取USB版本
4.5.3　管道重置
4.5.4　设备重置
4.5.5　管道中止与终止
4.6　用户程序
4.6.1　内核读/写
4.6.2　控制命令
4.7　小结
第5章　WDF 1394驱动开发
5.1　1394一席谈
5.1.1　版本情况
5.1.2　电源特性
5.1.3　1394卡
5.1.4　总线拓扑
5.2　发送请求
5.2.1　同步方式
5.2.2　异步方式
5.2.3　对WDM的回忆
5.3　总线重置与计数
5.3.1　总线重置
5.3.2　设置重置回调
5.3.3　计数更新
5.4　PNP操作
5.5　异步通信
5.5.1　地址范围
5.5.2　异步读
5.5.3　异步写
5.5.4　异步锁请求
5.5.5　数据流
5.6　等时通信
5.6.1　申请带宽
5.6.2　释放带宽
5.6.3　等时通道
5.6.4　资源句柄
5.6.5　缓冲区挂载
5.6.6　缓冲区解挂
5.6.7　开始传输
5.6.8　停止传输
5.6.9　其他等时操作
5.7　其他操作
5.7.1　设备配置
5.7.2　获取控制器信息
5.7.3　速度信息
5.7.4　厂商自定义命令
5.8　安装与测试
5.8.1　1394虚拟设备
5.8.2　创建虚拟设备
5.8.3　示例代码
5.8.4　安装与测试
5.9　小结
第6章　内核驱动C++编程
6.1　驱动中的类
6.1.1　一个简单的例子
6.1.2　new/delete
6.1.3　extern "C"
6.1.4　全局/静态变量
6.1.5　栈的忧虑
6.2　类封装的驱动程序
6.2.1　寻找合适的存储所
6.2.2　类方法与事件函数
6.2.3　KMDF驱动实现
6.2.4　WDM驱动实现
6.3　多态
6.3.1　基类、子类
6.3.2　实现多态
6.3.3　测试
6.4　小结
第7章　WDF驱动测试
7.1　WDF错误
7.1.1　实例分析
7.1.2　USB错误
7.2　WDF扩展调试命令
7.3　WDFTester
7.3.1　WDFFiTester
7.3.2　使用
7.3.3　WDFCallTracer
7.4　WDFVerifier
7.4.1　识别KMDF驱动
7.4.2　使用与介绍
7.5　小结
第8章　调试命令详解
8.1　概述
8.1.1　寻求帮助
8.1.2　DML语言
8.1.3　基本信息
8.1.4　基本设置
8.1.5　格式化显示
8.1.6　开始调试
8.2　符号与源码
8.2.1　模块列表
8.2.2　模块信息
8.2.3　符号路径
8.2.4　符号加载
8.2.5　符号搜索
8.2.6　源码命令
8.3　进程与线程
8.3.1　进程命令
8.3.2　线程命令
8.3.3　异常与事件
8.3.4　局部变量
8.3.5　显示类型
8.4　断点
8.4.1　软件断点
8.4.2　硬件断点
8.4.3　其他操作
8.5　内存命令
8.5.1　查看内存
8.5.2　内存信息
8.5.3　其他命令
8.6　小结
第9章　内核同步
9.1　关于内核同步
9.2　内核事件同步
9.2.1　原理
9.2.2　用户程序
9.2.3　内核实现
9.3　IRP同步
9.3.1　用户程序
9.3.2　内核实现
9.4　WMI同步
9.5　数据缓冲区同步
9.6　反向调用
9.7　小结
第10章　音频驱动开发
10.1　简介
10.1.1　音频模块架构
10.1.2　系统中的音频设备
10.2　AVStream对象
10.2.1　设备对象
10.2.2　Filter工厂和Filter对象
10.2.3　Pin工厂和Pin对象
10.2.4　Node对象与Connection结构体
10.3　AVStream描述符
10.3.1　描述符简介
10.3.2　描述符示例
10.3.3　分发函数表
10.3.4　自控表
10.3.5　自控表示例
10.4　代码讲解
10.4.1　入口函数
10.4.2　设备分发函数
10.4.3　Filter与Pin分发函数
10.4.4　创建和删除
10.4.5　数据处理
10.4.6　数据格式
10.5　自控表函数
10.5.1　事件函数
10.5.2　属性函数
10.5.3　方法函数
10.5.4　用户接口
10.6　硬件操作
10.6.1　数据DMA
10.6.2　AVStream中的DMA实现
10.6.3　谈谈ISR
10.7　安装与测试
10.7.1　安装
10.7.2　测试工具
10.8　小结
第11章　ASIO虚拟声卡
11.1　引言
11.2　关于ASIO
11.3　ASIO用户驱动
11.3.1　COM接口
11.3.2　安装与卸载
11.3.3　IASIO接口
11.3.4　技术核心
11.3.5　计算延迟
11.4　内核驱动实现
11.4.1　同步
11.4.2　原理
11.4.3　实现
11.5　ASIO音频软件
11.6　小结
第12章　设备驱动安装入门
12.1　基础知识预介
12.1.1　设备类型
12.1.2　设备实例ID
12.1.3　驱动加载和安装
12.2　安装模块
12.2.1　内核PNP管理器
12.2.2　用户PNP管理器
12.2.3　安装接口函数（Setup API）
12.2.4　配置管理器接口（CfgMgr API）
12.2.5　类安装器（Class Installers）
12.2.6　类协安装器（Class Co-Installers）
12.2.7　设备协安装器（Device Co-Installers）
12.2.8　驱动包（Driver Package）
12.2.9　驱动仓库（Driver Store）
12.2.10　设备管理器（Device Manager）
12.2.11　安装程序
12.2.12　新设备向导
12.2.13　添加硬件向导
12.2.14　驱动安装器（Driver Installer）
12.3　重要问题
12.3.1　寻找和选择
12.3.2　32位与64位系统兼容
12.3.3　系统重启
12.4　安装模式
12.4.1　示例1：客户端模式
12.4.2　示例2：服务器模式
12.5　安装器编程
12.5.1　DIF码
12.5.2　处理流程
12.5.3　工程示例
12.5.4　注册
12.6　小结
第13章　深入解析INF文件
13.1　概述
13.1.1　域
13.1.2　指令
13.1.3　多系统
13.2　注册表指令
13.2.1　缩写根键
13.2.2　软件键
13.2.3　硬件键
13.2.4　AddReg
13.2.5　DelReg
13.2.6　BitReg
13.3　文件操作指令
13.3.1　CopyFiles
13.3.2　DelFiles
13.3.3　RenFiles
13.4　服务指令
13.4.1　AddService
13.4.2　DelService
13.5　基本域
13.5.1　版本域
13.5.2　文件域
13.5.3　默认安装域
13.5.4　控制域
13.5.5　字符串域
13.6　设备类安装域
13.6.1　主域
13.6.2　服务子域
13.7　接口类安装域
13.8　厂商/产品域
13.8.1　厂商域
13.8.2　产品域
13.9　设备安装域
13.9.1　硬件子域
13.9.2　协安装器子域
13.9.3　接口子域
13.9.4　厂商默认配置子域
13.9.5　逻辑优先配置子域
13.10　ChkInf介绍
13.11　小结
第14章　设计驱动安装程序
14.1　驱动包
14.1.1　安装方式
14.1.2　安装驱动包
14.1.3　卸载驱动包
14.2　驱动更新
14.2.1　设备已连接
14.2.2　设备未连接
14.2.3　枚举系统设备
14.3　分析INF文件
14.3.1　函数介绍
14.3.2　打印设备ID
14.4　MyDrvInst介绍
14.5　制作软件安装包
14.5.1　视图介绍
14.5.2　我们的工程
14.5.3　编译执行
14.6　小结
附录A　CY001 USB开发板
附录B　VisualKD + VMWare实现单机内核调试