编辑推荐
《竹林蹊径:深入浅出Windows驱动开发》:驱网核心技术丛书
媒体推荐
这本书《竹林蹊径——深入浅出Windows驱动开发》是三位作者张佩、马勇和董鉴源的最新力作,他们将自己在实践中积累起来的经验整理成册,以期望后学者能少走弯路,缩短Windows驱动程序开发的学习之路。这本书重点介绍了KMDF、USB/1394和音频驱动程序的开发,以及设备驱动程序的发行和安装。建议有一定Windows驱动程序开发基础的读者看一看这本书,尤其是,如果你正打算使用KMDF,或者正在从事与USB/1394或音频驱动程序相关的编程工作,那么,这本书便是一份宝贵的实践指导了。
——潘爱民 《Windows内核原理与实现》作者
很高兴看到又有一本原刨的驱动开发书籍即将出版,尽管这方面的书已经有一些,但还有很多主题未被覆盖到,这本书比较详细地讨论了使用C++开发驱动、音频驱动、内核流等其他书籍很少涉及的话题,填补了这些方面的空白,特此推荐!
——张银奎《软件调试》作者
张佩是我在“驱动开发”这个圈子里的好朋友,他也是我知道国内做WDF驱动程序最早的程序员之一,我们经常讨论驱动开发的知识。Windows驱动开发属于底层开发,所以变化一直都不太大。然而从WDM框架到WDF框架是变化最“激烈”的一次。现在知名厂商的驱动程序都从WDM框架迁移到WDF框架下。这本书应该是国内第一本详细介绍WDF框架的书籍,当我第一次读完初稿后的确有醍醐灌顶的快乐。希望这本书能带领更多的驱动程序爱好者进入这个领域。
——张帆《window妈区动开发技术详解》作者
作者简介
张佩,1982年出生于江中小岛江苏扬中,工作后一直从事内核驱动开发。初学颇难,至今仍显踯躅,深憾未能窥出系统全貌,而吭吭努力不断。学习过程中,得到朋友无私帮助颇多,有所心得后,亦乐于作文、评说,以传播给更多的爱好者——此书由此而来。目前就职于AMD上海研发中心。
马勇,网名znsoft,驱动开发网创始人。专注于文件系统驱动研究,擅长文档透明加密相关技术及软件架构设计。从事驱动开发及研发管理工作十数年,目前就职于铠信安全实验室。
董鉴源,C/C++、汇编程序员。1986年生于山东。大学毕业后从事各类系统软件的开发设计工作。目前在济南从事Windows内核方面的开发工作。爱好读书、文学、围棋和武术等,对编写操作系统尤为痴有幸参与本书部分基础章节的编写。
目录
向内核世界说一声:hello,我来了。如果你是一个初学者,并对这个世界充满好奇心,请从这一章开始,我们一起打招呼~
第1章 HelloWorld驱动
1.1 从HelloWorld开始
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 VirtualPC虚拟机
1.3 小结
如何在规范的商业环境中,开发成功而有效的驱动软件?驱网站长马勇(ZnSoft)将向你娓娓道来。你会学到这些内容:建立一个简单而有效的开发、调试环境:64位环境下的内核编程技巧;如何发布你的驱动软件。
第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 小结
WDF是目前最新的驱动编程框架。当很多内核程序员还紧抱WDM的巨大佛脚时,千万要记住,WDF已是大势所趋。本章介绍了WDF最重要的几个概念,并进行了一定程度的深度挖掘。对于WDF框架的三大核心模型:对象模型、事件模型、PNP/Power模型,本章作了重点讲述。
第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章 WDFUSB设备驱动开发
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 LISB驱动栈、设备栈
4.3 内核开发
4.3.1 设备驱动
4.3.2 入口函数
4.3.3 LISB描述符
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 小结
1394俗称火线。大伙平时最多接触它的地方大概是内核调试时,借助1394卡进行双机互联。本章首先从硬件方面介绍了1394的知识,它的总线结构很特别+极具可扩性,能非常方便地在各种类型的1394设备之间建立数据链路。内核编程方面,本章重点讲解了数据通信相关知识,分为异步通信和同步通信两种方式,颇为复杂,相对难于掌握,但套路是现成的,变化的东西不多,可以熟能生巧。本章最后介绍了1394双机互联的原理,有兴趣的读者可参考之。
第5章 WDF1394驱动开发
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 计数更新
……
第6章 内核驱动C++编程
第7章 WDF驱动测试
第8章 调试命令详解
第9章 内核同步
第10章 音频驱动开发
第11章 ASIO虚拟声卡
第12章 设备驱动安装入门
第13章 深入解析INF文件
第14章 设计驱动安装程序
附录A CY001USB开发板
附录B VisualKD+VMWare实现单机内核调试
文摘
版权页:
插图:
12.4安装模式
Windows定义了两种设备驱动安装模式:服务器模式和客户端模式。这里是把:PNP管理器当成了“服务器”,而把其用户界面及用户操作看成了“客户”。如果安装过程完全由。PNP管理器完成,不需要用户介入操作,那么这种安装模式即称为“服务器模式”。
区分两种安装模式的方法是:是否需要用户介入,无用户介入者为服务器模式,有用户介入者为客户端模式。
服务器模式由PNP管理器完成驱动安装任务,不涉及“新设备向导”、“添加硬件向导”安装模块;而客户端模式则需要使用这些用户模块,以引入用户交互完成安装。
服务器模式的安装完全由系统的安装组件完成,而不必用户介入,并且也不会在安装过程中显示需要交互的用户界面(比如一个模式对话框)。系统总是优先采用这种安装模式,但在准入机制上,会做如下几项颇为复杂的判断。
(1)设备必须是一个即插即用的设备,即PNP设备。
(2)在系统盘的Windows\Inf目录中,能找到一个和当前设备匹配的安装文件。如是’Vista以后系统,则应在系统的驱动仓库中能找到一个和当前设备匹配的驱动包,如果找不到,则通过WindowsUpdate中心应可以找到并下载安装到驱动仓库中。
(3)第2步在Windows\Inf目录中找到的安装文件,有一个匹配的签名文件(.cat文件)。
(4)第2步在Windows\Inf目录中找到的安装文件,在系统中的驱动包应当是完整的(如是Vista以后系统,则是对所找到的驱动包目录而言),即安装文件(INF文件)中所涉及的所有驱动文件,都能在驱动包中找到。指定的安装所用的文件(驱动文件、协安装器文件等)都在系统中存在,并且能够被接下来的SetupAPI函数找到。
编辑推荐:
更多图书资讯可访问读书人图书频道http://www.reAder8.cn/book/