书籍详情

Windows 2000设备驱动程序设计指南

Windows 2000设备驱动程序设计指南

作者:(美)Art Baker,(美)Jerry Lozano著;施诺等译

出版社:机械工业出版社

出版时间:2001-01-01

ISBN:9787111092834

定价:¥58.00

购买这本书可以去
内容简介
  本书全面讲述了驱动程序模型、内核模式编程和硬件接口等方面的知识,可作为驱动程序开发的自学教材使用。全书共分17章和三个附录,第1-5章讨论编写设备驱动程序所需的基础知识。包括Windows 2000体系结构,Windows 2000 I/O管理程序等内容。第 6-13章是本书的核心内容,讨论了Windows 2000驱动程序开发的所有内容。第14-15章讨论设备驱动程序构造方面的高级主题,包括使用系统线程、分层、过滤和驱动程序类别等。最后两章讨论驱动程序的安装和调试。附录部分讨论了驱动程序开发所需的参考信息,列出了Windows 2000符号文件安装、故障检验码等内容。
作者简介
暂缺《Windows 2000设备驱动程序设计指南》作者简介
目录
译者序

前言
第1章 Windows 2000驱动程序概述
1.1 总的系统体系结构
1.1.1 Windows 2000的设计目标
1.1.2 Windows 2000中的硬件特权层
1.1.3 可移植性
1.1.4 可扩展性
1.1.5 性能
1.1.6 执行程序组件
1.2 内核模式I/O组件
1.2.1 I/O子系统的设计目标
1.2.2 Windows 2000中驱动程序的种类
1.3 特殊的驱动程序结构
1.3.1 视频驱动程序
1.3.2 打印机驱动程序
1.3.3 多媒体驱动程序
1.3.4 网络驱动程序
1.4 小结
第2章 硬件环境
2.1 硬件基础
2.1.1 设备寄存器
2.1.2 访问设备寄存器
2.1.3 设备中断
2.1.4 数据传输机制
2.1.5 DMA机制
2.1.6 设备专用内存
2.1.7 自动识别和自动配置
2.2 总线和Windows 2000
2.2.1 ISA:工业标准体系结构
2.2.2 EISA:扩展工业标准体系结构
2.2.3 PCI:外设部件互连标准
2.2.4 USB:通用串行总线架构
2.2.5 IEEE 1394:Firewire总线
2.2.6 PC卡(PCMCIA)总线
2.3 硬件使用心得
2.3.1 了解硬件
2.3.2 使用硬件智能
2.3.3 测试硬件
2.4 小结
第3章 内核模式I/O处理技术
3.1 内核模式代码如何执行
3.1.1 陷饼或者异常环境
3.1.2 中断环境
3.1.3 内核模式线程环境
3.2 Windows 2000使用的中断优先级
3.2.1 CPU优先级分层
3.2.2 中断处理顺序
3.2.3 软件产生的中断
3.3 延迟过程调用(DPC)
3.3.1 DPC运行
3.3.2 DPC行为
3.4 用户缓冲区访问
3.5 内核模式驱动程序结构
3.5.1 驱动程序初始化和清除例程
3.5.2 I/O系统服务调度例程
3.5.3 数据传输例程
3.5.4 资源同步回调
3.5.5 其他驱动程序例程
3.6 I/O处理顺序
3.6.1 I/O管理程序须处理
3.6.2 设备驱动程序预处理
3.6.3 设备启动和中断服务
3.6.4 驱动程序后处理
3.6.5 UO管理程序后处理
3.7 小结
第4章 驱动程序和内核模式对象
4.1 数据对象和Windows 2000
4.1.1 Windows 2000和OOP
4.1.2 Windows 2000对象和Win32对象
4.2 I/O请求包(IRP)
4.2.1 IRP布局
4.2.2 操纵IRP
4.3 驱动程序对象
4.4 设备对象和设备扩展
4.4.1 设备对象布局
4.4.2 操纵设备对象
4.4.3 设备扩展
4.5 控制器对象和控制器扩展
4.5.1 控制器对象布局
4.5.2 操纵控制器对象
4.5.3 控制器扩展
4.6 适配器对象
4.6.1 适配器对象布局
4.6.2 操纵适配器对象
4.7 中断对象
4.7.1 中断对象布局
4.7.2 操纵中断对象
4.8 小结
第5章 一般开发问题
5.1 驱动程序设计策略
5.1.1 使用形式化设计方法
5.1.2 使用增量开发方法
5.1.3 检查和使用示例驱动程序
5.2 编码规范和技术
5.2.1 一般性建议
5.2.2 命名规范
5.2.3 头文件
5.2.4 状态返回值
5.2.5 Windows 2000驱动程序支持例程
5.2.6 丢弃初始化例程
5.2.7 控制驱动程序分页
5.3 驱动程序存储分配
5.3.1 驱动程序可用的内存
5.3.2 使用内核堆栈
5.3.3 使用地区域
5.3.4 内存再分配的系统支持
5.4 Unicode字符串
5.4.1 Unicode字符串数据类型
5.4.2 使用Unicode
5.5 中断同步
5.5.1 问题
5.5.2 中断阻止
5.5.3 阻止中断的规则
5.5.4 使用延迟过程调用进行同步
5.6 多个CPU同步
5.6.1 自旅锁如何工作
5.6.2 使用自旅锁
5.6.3 使用自旅锁的规则
5.7 链表
5.7.1 单向链表
5.7.2 双向链表
5.7.3 删除链表中的块
5.8 小结
第6章 初始化和清除例程
6.1 编写DriverEntry例程
6.1.1 执行环境
6.1.2 DriverEntry例程进行的工作
6.1.3 声明DriverEntry入口点
6.1.4 建立设备对象
6.1.5 选择缓冲策略
6.1.6 设备名字
6.2 代码示例:驱动程序初始化
6.2.1 DriverEntry
6.2.2 CreateDevice
6.3 编写Reinitialize例程
6.3.1 执行环境
6.3.2 Reinitialize例程进行的工作
6.4 编写Unload例程
6.4.1 执行环境
6.4.2 Unload例程进行的工作
6.5 代码示例:驱动程序卸载
6.6 编写Shutdown例程
6.6.1 执行环境
6.6.2 Shudown例程进行的工作
6.6.3 启用关闭通知
6.7 测试验动程序
6.7.1 测试过程
6.7.2 VisualC++设备驱动程序AppWizard向导
6.7.3 Windows 2000 DDK
6.7.4 驱动程序编译结果
6.7.5 手动安装内核模式驱动程序
6.7.6 装载驱动程序
6.7.7 Windows 2000计算机管理控制台
6.7.8 WINOBJ实用程序
6.8 小结
第7章 驱动程序Dispatch例程
7.1 声明驱动程序Dispatsh例程
7.1.1 I/O请求的调度机制
7.1.2 启用特定的函数代码
7.1.3 确定支持哪些国数代码
7.2 编写驱动程序Dispatch例程
7.2.1 执行环境
7.2.2 Dispatch例程进行的工作
7.2.3 退出Dispatch例程
7.3 处理读写请求
7.4 代码示例:回送设备
7.5 扩展Dispatch接口
7.5.1 定义专用的IOCTL值
7.5.2 IOCTL参数传递方法
7.5.3 编写IOCTL头文件
7.5.4 处理IOCTL请求
7.5.5 管理IOCTL缓冲区
7.6 测试驱动程序Dispatch例程
7.6.1 测试步骤
7.6.2 测试程序示例
7.7 小结
第8章 中断驱动的I/O
8.1 程控I/O工作原理
8.1.1 程控I/O期间发生的事情
8.1.2 同步驱动程序例程
8.2 驱动程序初始化和清除工作
8.2.1 初始化Start I/O入口点
8.2.2 初始化DpcForIsr例程
8.2.3 与中断源相连接
8.2.4 断开与中断源的连接
8.3 编写Start I/O例程
8.3.1 执行环境
8.3.2 Start I/O例程进行的工作
8.4 编写中断服务例程(ISR)
8.4.1 执行环境
8.4.2 中断服务例程进行的工作
8.5 编写DpcForIsr例程
8.5.1 执行环境
8.5.2 DpcForIsr例程进行的工作
8.5.3 优先权增加
8.6 一些硬件:并行端口
8.6.1 并行端口进行的工作
8.6.2 设备寄存器
8.6.3 中断行为
8.6.4 并行端口的回送连接器
8.7 代码示例:并行端口回送驱动程序
8.7.1 驱动程序目的
8.7.2 Driver.h
8.7.3 Driver.cpp
8.8 测试并行端口回送驱动程序
8.9 小结
第9章 硬件初始化
9.1 即插即用体系结构:简要历史回顾
9.1.1 即插即用结构的目标
9.1.2 即插即用结构的组成部分
9.2 遗留驱动程序注册表的作用
9.3 探测即插即用设备
9.4 驱动程序分层在即插即用结构中的作用
9.5 新的WDM IRP Dispatch函数
9.5.1 要求的即插即用IRP
9.5.2 PDO即插即用IRP
9.5.3 传递即括即用请求
9.5.4 I/O完成例程
9.5.5 总线驱动程序即招即用请求
9.6 设备列举
9.6.1 硬件资源描述符
9.6.2 在驱动程序中使用硬件资源
9.7 设备接口
9.7.1 接口定义
9.7.2 接口构造
9.7.3 接口引用计数
9.7.4 注册和启用一个接口
9.8 代码示例:简单的即插即用驱动程序
9.9 小结
第10章 电源管理
10.1 热插拔设备
10.1.1 总线考虑
10.1.2 设备考虑
10.2 OnNow规范
10.2.1 电源状态
10.2 2 电源策略
10.2.3 电源状态矩阵
10.2.4 电源状态更改
10.3 唤醒请求
10.4 电源管理问题
10.4.1 空闲管理
10.4.2 电源管理的用户接口
10.5 小结
第11章 计时器
11.1 处理设备超时
11.1.1 I/O计时器例程工作原理
11.1.2 如何捕获设备超时条件
11.2 代码示例:捕获设备超时
11.2.1 设备扩展补充
11.2.2 AddDevice补充
11.2.3 更改Dispatsh例程
11.2.4 StartIo更改
11.2.5 ISR更改
11.2.6 I/O计时器回调例程
11.3 管理没有中断的设备
11.3.1 使用轮询式设备
11.3.2 CustomTimerDpc例程工作原理
11.3.3 如何建立CustomTimerDpc例程
11.3.4 如何规定终止时间
11.3.5 CustomTimerDpc例程的其他用法
11.4 代码示例:基于计时器的驱动程序
11.4.1 设备扩展补充
11.4.2 AddDevice修改
11.4.3 TransmitBytes更改
11.4.4 PoilingTimerDpc例程
11.5 小结
第12章 DMA驱动程序
12.1 Windows 2000中DMA的工作原理
12.1.1 用适配器对象隐藏DMA硬件变化
12.1.2 分散/集中问题
12.1.3 内存描述符列表
12.1.4 维护高速缓存相关性
12.1.5 基于包的DMA和通用缓冲区DMA
12.1.6 Windows 2000 DMA结构的局限性
12.2 操作适配器对象
12.2.1 查找正确的适配器对象
12.2.2 获取和释放适配器对象
12.2.3 设置DMA硬件
12.2.4 刷新适配器对象高速缓存
12.3 编写基于包的从属DMA驱动程序
12.3.1 基于包的从属DMA工作原理
12.3.2 分割DMA传输
12.4 代码示例:基于包的从属DMA驱动程序
12.4.1 DRIVER.H
12.4.2 GetDmaInfo例程
12.4.3 Start I/O更改
12.4.4 AdapterControl(适配器控制)例程
12.4.5 DpcForIsr例程
12.5 编写基于包的总线主控器DMA驱动程序
12.5.1 建立总线主控器硬件
12.5.2 支持分散/集中的硬件
12.5.3 用MapTransfer建立分散/集中列表
12.6 编写通用缓冲区从属DMA驱动程序
12.6.1 分配一个通用缓冲区
12.6.2 使用通用缓冲区从属DMA维护吞吐量
12.7 编写通用缓冲区总线主控器DMA驱动程序
12.8 小结
第13章 Windows管理和设备测试
13.1 WMI:业界蓝图
13.2 WMI体系结构
13.2.1 在WDM驱动程序中提供WMI支持
13.2.2 MOF语法
13.2.3 MOF类定义示例
13.2.4 编译MOF源文件
13.2.5 处理WMI IRP请求
13.2.6 类和实例
13.2.7 WMILIB
13.3 WMI概述
13.4 常规驱动程序事件记录
13.4.1 事件记录工作原理
13.4.2 操作消息
13.4.3 编写消息定义文件
13.4.4 一个简单的例子
13.4.5 编译消息定义文件
13.4.6 把消息资源添加到驱动程序
13.4.7 把驱动程序注册为事件源
13.4.8 产生日志项
13.4.9 分配错误日志包
13.4.10 记录错误
13.5 小结
第14章 系统线程
14.1 系统线程的定义和使用
14.1.1 使用线程的时机
14.1.2 建立和终止系统线程
14.1.3 管理线程优先权
14.1.4 系统工作者线程
14.2 线程同步
14.2.1 时间同步
14.2.2 一般同步
14.3 使用调度程序对象
14.3.1 事件对象
14.3.2 在驱动程序间共享事件
14.3.3 互斥对象
14.3.4 信号量对象
14.3.5 计时器对象
14.3.6 线程对象
14.3.7 直斥对象的变体
14.3.8 同步死锁
14.4 代码示例:基干线程的驱动程序
14.4.1 驱动程序工作原理
14.4.2 DEVICE_EXTENSION结构
14.4.3 AddDevice函数
14.4.4 InspatchReadWrite函数
14.4.5 Thread.cpp
14.4.6 Transfer.c
14.5 小结
第15章 分层驱动程序
15.1 中级驱动程序综述
15.1.1 中级驱动程序定义
15.1.2 使用分层体系结构的时机
15.2 编写分层驱动程序
15.2.1 分层驱动程序工作原理
15.2.2 分层驱动程序中的初始化和清除工作
15.2.3 代码段:连接到另一个驱动程序
15.2.4 分层驱动程序的其他初始化问题
15.2.5 分层驱动程序中的I/O请求处理技术
15.2.6 代码段:调用一个低级驱动程序
15.3 编写I/O完成例程
15.3.1 请求I/O完成例程回调
15.3.2 执行环境
15.3.3 I/O完成例程进行的工作
15.3.4 代码段:I/O完成例程
15.4 分配新增的IRP
15.4.1 IRP的I/O堆栈再访问
15.4.2 控制IRP堆栈的大小
15.4.3 用IoBuildSynchronousFsdRequest建立IRP
15.4.4 用IoBalldAsynchronousFsdRequest建立IRP
15.4.5 用IoBuildDeviceloControlRequest建立IRP
15.4.6 从零开始建立IRP
15.4.7 建立低级驱动程序的缓冲区
15.4.8 跟踪驱动程序分配的IRP
15.5 编写过滤器驱动程序
15.5.1 过滤器驱动程序工作原理
15.5.2 过滤器驱动程序中的初始化和清除工作
15.5.3 使连接透明
15.6 代码示例:过滤器驱动程序
15.6.1 DEVICE_EXTENSION结构
15.6.2 DriverEntry函数
15.6.3 AddDevice函数
15.6.4 OverriddenDispatchWrite函数
15.6.5 OverriddenDispatchDeviceIoControl函数
15.6.6 DispatchPassThru函数
15.6.7 I/O完成例程
15.7 编写紧耦合驱动程序
15.7.1 紧耦合驱动程序工作原理
15.7.2 紧耦合驱动程序中的初始化和清除工作
15.8 小结
第16章 驱动程序安装
16.1 驱动程序安装概述
16.2 使用INF文件自动安装
16.2.1 INF文件结构
16.2.2 Version节
16.2.3 Manufacturers节
16.2.4 Models节
16.2.5 DDInstall节
16.2.6 CopyFiles节
16.2.7 AddReg节
16.2.8 SourceDisksNames节
16.2.9 SourceDisksFiles节
16.3 使用驱动程序的INF文件
16.3.1 手动安装
16.3.2 自动安装
16.3.3 添加/删除硬件向导
16.3.4 类别名字和设备ID
16.3.5 定制安装
16.4 控制驱动程序装载顺序
16.5 驱动程序数字签名
16.5.1 Microsoft验证驱动程序的原因
16.5.2 数字签名
16.6 小结
第17章 测试和调试驱动程序
17.1 驱动程序测试准则
17.1.1 测试验动程序的常规方法
17.1.2 Microsoft硬件兼容性测试
17.2 驱动程序失败的原因
17.2.1 驱动程序错误分类
17.2.2 重演驱动程序错误
17.2.3 防错性编码策略
17.2.4 跟踪驱动程序错误
17.3 阅读故障屏幕
17.3.1 系统崩溃时发生什么
17.3.2 蓝色死机屏幕
17.4 WinDbg综述
17.4.1 源代码调试的关键
17.4.2 一些WinDbg命令
17.5 故障转储分析
17.5.1 分析的目标
17.5.2 开始分析
17.5.3 跟踪难栈
17.5.4 间接调查方法
17.6 交互式调试
17.6.1 启动和停止一个调试对话
17.6.2 设置断点
17.6.3 设置硬断点
17.6.4 中间输出
17.7 编写WinDbg扩展
17.7.1 WinDbg扩展工作原理
17.7.2 初始化和版本检查函数
17.7.3 编写扩展命令
17.7.4 WinDbg助手函数
17.7.5 建立并使用扩展DLL
17.8 代码示例:WinDbg扩展
17.9 其他调试技术
17.9.1 把已经调试的代码留在驱动程序中
17.9.2 捕获不正确的假设
17.9.3 使用故障检验回调函数
17.9.4 捕获内存泄漏
17.9.5 使用计数器、位和缓冲区
17.10 小结
附录A 驱动程序调试环境
附录B 故障检验码
附录C 编译驱动程序
附录D 关于CD-ROM

猜您喜欢

读书导航