图书介绍
Windows 2000设备驱动程序设计指南PDF|Epub|txt|kindle电子书版本网盘下载
![Windows 2000设备驱动程序设计指南](https://www.shukui.net/cover/19/31430455.jpg)
- (美)Art Baker,(美)Jerry Lozano著;施诺等译 著
- 出版社: 北京:机械工业出版社
- ISBN:711109283X
- 出版时间:2001
- 标注页数:360页
- 文件大小:28MB
- 文件页数:375页
- 主题词:Windows
PDF下载
下载说明
Windows 2000设备驱动程序设计指南PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
译者序1
前言1
第1章 Windows 2000 驱动程序概述1
1.1 总的系统体系结构1
1.1.1 Windows 2000 的设计目标1
1.1.2 Windows 2000中的硬件特权层1
1.1.3 可移植性2
1.1.4 可扩展性3
1.1.5 性能3
1.1.6 执行程序组件4
1.2 内核模式I/O组件8
1.2.1 I/O子系统的设计目标8
1.2.2 Windows 2000 中驱动程序的种类8
1.3 特殊的驱动程序结构10
1.3.1 视频驱动程序11
1.3.2 打印机驱动程序12
1.3.3 多媒体驱动程序13
1.3.4 网络驱动程序14
1.4 小结14
第2章 硬件环境15
2.1 硬件基础15
2.1.1 设备寄存器15
2.1.2 访问设备寄存器16
2.1.3 设备中断18
2.1.4 数据传输机制20
2.1.5 DMA机制20
2.1.7 自动识别和自动配置21
2.1.6 设备专用内存21
2.2 总线和Windws 200022
2.2.1 ISA: 工业标准体系结构23
2.2.2 EISA: 扩展工业标准体系结构25
2.2.3 PCI: 外设部件互连标准27
2.2.4 USB: 通用串行总线架构29
2.2.5 IEEE 1394: Firewire总线31
2.2.6 PC卡(PCMCIA)总线32
2.3 硬件使用心得33
2.3.1 了解硬件33
2.3.2 使用硬件智能34
2.3.3 测试硬件34
2.4 小结34
3.1.1 陷阱或者异常环境35
第3章 内核模式I/O处理技术35
3.1 内核模式代码如何执行35
3.1.2 中断环境36
3.1.3 内核模式线程环境36
3.2 Windows 2000使用的中断优先级36
3.2.1 CPU优先级分层36
3.2.2 中断处理顺序37
3.2.3 软件产生的中断37
3.3 延迟过程调用(DPC)38
3.3.1 DPC运行38
3.3.2 DPC行为39
3.4 用户缓冲区访问39
3.5 内核模式驱动程序结构40
3.5.2 I/O系统服务调度例程41
3.5.1 驱动程序初始化和清除例程41
3.5.3 数据传输例程42
3.5.4 资源同步回调42
3.5.5 其他驱动程序例程43
3.6 I/O处理顺序44
3.6.1 I/O管理程序预处理44
3.6.2 设备驱动程序预处理44
3.6.3 设备启动和中断服务45
3.6.4 驱动程序后处理45
3.6.5 I/O管理程序后处理46
3.7 小结47
第4章 驱动程序和内核模式对象48
4.1 数据对象和Windows 200048
4.1.1 Windows 2000和OOP48
4.2.1 IRP布局49
4.1.2 Windows 2000对象和Win32对象49
4.2 I/O请求包(IRP)49
4.2.2 操纵IRP51
4.3 驱动程序对象52
4.4 设备对象和设备扩展53
4.4.1 设备对象布局53
4.4.2 操纵设备对象54
4.4.3 设备扩展55
4.5 控制器对象和控制器扩展55
4.5.1 控制器对象布局56
4.5.2 操纵控制器对象56
4.5.3 控制器扩展56
4.6 适配器对象57
4.7 中断对象58
4.6.1 适配器对象布局58
4.6.2 操纵适配器对象58
4.7.1 中断对象布局59
4.7.2 操纵中断对象59
4.8 小结59
第5章 一般开发问题60
5.1 驱动程序设计策略60
5.1.1 使用形式化设计方法60
5.1.2 使用增量开发方法61
5.1.3 检查和使用示例驱动程序61
5.2 编码规范和技术61
5.2.1 一般性建议62
5.2.2 命名规范62
5.2.3 头文件62
5.2.4 状态返回值63
5.2.5 Windows 2000驱动程序支持例程64
5.2.6 丢弃初始化例程65
5.2.7 控制驱动程序分页66
5.3 驱动程序存储分配66
5.3.1 驱动程序可用的内存66
5.3.2 使用内核堆栈67
5.3.3 使用池区域67
5.3.4 内存再分配的系统支持68
5.4 Unicode字符串70
5.4.1 Unicode字符串数据类型70
5.4.2 使用Unicode71
5.5 中断同步73
5.5.1 问题73
5.5.2 中断阻止74
5.5.3 阻止中断的规则75
5.5.4 使用延迟过程调用进行同步75
5.6 多个CPU同步75
5.6.1 自旋锁如何工作75
5.6.2 使用自旋锁75
5.6.3 使用自旋锁的规则76
5.7 链表77
5.7.1 单向链表77
5.7.2 双向链表78
5.7.3 删除链表中的块78
5.8 小结79
6.1.1 执行环境80
6.1 编写DriverEntry例程80
第6章 初始化和清除例程80
6.1.2 DriverEntry例程进行的工作81
6.1.3 声明DriverEntry入口点81
6.1.4 建立设备对象82
6.1.5 选择缓冲策略83
6.1.6 设备名字83
6.2 代码示例: 驱动程序初始化84
6.2.1 DriverEntry84
6.2.2 CreateDevice85
6.3 编写Reinitialize例程87
6.3.1 执行环境87
6.4.2 Unload例程进行的工作88
6.4.1 执行环境88
6.3.2 Reinitialize例程进行的工作88
6.4 编写Unload例程88
6.5 代码示例: 驱动程序卸载89
6.6 编写Shutdown例程90
6.6.1 执行环境90
6.6.2 Shutdown例程进行的工作90
6.6.3 启用关闭通知90
6.7 测试驱动程序91
6.7.1 测试过程91
6.7.2 Visual C+ +设备驱动程序AppWizard向导91
6.7.3 Windows 2000 DDK92
6.7.4 驱动程序编译结果92
6.7.5 手动安装内核模式驱动程序92
6.7.7 Windows 2000 计算机管理控制台93
6.7.6 装载驱动程序93
6.7.8 WINOBJ实用程序95
6.8 小结95
第7章 驱动程序Dispatch例程97
7.1 声明驱动程序Dispatch例程97
7.1.1 I/O请求的调度机制97
7.1.2 启用特定的函数代码97
7.1.3 确定支持哪些函数代码99
7.2 编写驱动程序Dispatch例程100
7.2.1 执行环境100
7.2.2 Dispatch例程进行的工作100
7.2.3 退出Dispatch例程101
7.3 处理读写请求103
7.4 代码示例: 回送设备104
7.5.1 定义专用的IOCTL值106
7.5 扩展Dispatch接口106
7.5.2 IOCTL参数传递方法107
7.5.3 编写IOCTL头文件108
7.5.4 处理IOCTL请求109
7.5.5 管理IOCTL缓冲区110
7.6 测试驱动程序Dispatch例程111
7.6.1 测试步骤112
7.6.2 测试程序示例112
7.7 小结112
第8章 中断驱动的I/O113
8.1 程控I/O工作原理113
8.1.1 程控I/O期间发生的事情113
8.1.2 同步驱动程序例程114
8.2.2 初始化DpcForIsr115
8.2.3 与中断源相连接115
8.2.1 初始化Start I/O入口点115
8.2 驱动程序初始化和清除工作115
8.2.4 断开与中断源的连接117
8.3 编写Start I/O例程117
8.3.1 执行环境117
8.3.2 Start I/O例程进行的工作117
8.4 编写中断服务例程(ISR)118
8.4.1 执行环境118
8.4.2 中断服务例程进行的工作118
8.5 编写DpcForIsr例程119
8.5.1 执行环境119
8.5.2 DpcForIsr例程进行的工作119
8.5.3 优先权增加119
8.6.1 并行端口进行的工作120
8.6 一些硬件: 并行端口120
8.6.2 设备寄存器121
8.6.3 中断行为122
8.6.4 并行端口的回送连接器122
8.7 代码示例: 并行端口回送驱动程序122
8.7.1 驱动程序目的122
8.7.2 Driver.h123
8.7.3 Driver.cpp124
8.8 测试并行端口回送驱动程序128
8.9 小结129
第9章 硬件初始化130
9.1 即插即用体系结构: 简要历史回顾130
9.1.1 即插即用结构的目标131
9.1.2 即插即用结构的组成部分131
9.2 遗留驱动程序注册表的作用132
9.3 探测即插即用设备133
9.4 驱动程序分层在即插即用结构中的作用133
9.5 新的WDM IRP Dispatch函数137
9.5.1 要求的即插即用IRP138
9.5.2 PDO即插即用IRP139
9.5.3 传递即插即用请求140
9.5.4 I/O完成例程141
9.5.5 总线驱动程序即插即用请求144
9.6 设备列举144
9.6.1 硬件资源描述符145
9.6.2 在驱动程序中使用硬件资源147
9.7 设备接口147
9.7.1 接口定义147
9.7.3 接口引用计数148
9.7.2 接口构造148
9.7.4 注册和启用一个接口149
9.8 代码示例: 简单的即插即用驱动程序150
9.9 小结150
第10章 电源管理151
10.1 热插拔设备151
10.1.1 总线考虑151
10.1.2 设备考虑152
10.2 OnNow规范152
10.2.1 电源状态152
10.2.2 电源策略153
10.2.4 电源状态更改154
10.2.3 电源状态矩阵154
10.3 唤醒请求158
10.4 电源管理问题159
10.4.1 空闲管理160
10.4.2 电源管理的用户接口160
10.5 小结161
第11章 计时器162
11.1 处理设备超时162
11.1.1 I/O计时器例程工作原理162
11.1.2 如何捕获设备超时条件163
11.2 代码示例: 捕获设备超时164
11.2.1 设备扩展补充164
11.2.2 AddDevice补充164
11.2.3 更改Dispatch例程164
11.2.5 ISR更改165
11.2.4 StartIo更改165
11.2.6 I/O计时器回调例程166
11.3 管理没有中断的设备167
11.3.1 使用轮询式设备167
11.3.2 CustomTimerDpc例程工作原理168
11.3.3 如何建立CustomTimerDpc例程168
11.3.4 如何规定终止时间170
11.3.5 CustomTimerDpc例程的其他用法171
11.4 代码示例: 基于计时器的驱动程序171
11.4.1 设备扩展补充171
11.4.2 AddDevice修改172
11.4.3 TransmitBytes更改172
11.4.4 PollingTimerDpc例程173
11.5 小结173
12.1.1 用适配器对象隐藏DMA硬件变化174
第12章 DMA驱动程序174
12.1 Windows 2000中DMA的工作原理174
12.1.2 分散/集中问题175
12.1.3 内存描述符列表176
12.1.4 维护高速缓存相关性178
12.1.5 基于包的DMA和通用缓冲区DMA180
12.1.6 Windows 2000 DAM结构的局限性180
12.2 操作适配器对象180
12.2.1 查找正确的适配器对象180
12.2.2 获取和释放适配器对象182
12.2.3 设置DMA硬件184
12.2.4 刷新适配器对象高速缓存184
12.3 编写基于包的从属DMA驱动程序185
12.3.1 基于包的从属DMA工作原理185
12.3.2 分割DMA传输187
12.4 代码示例: 基于包的从属DMA驱动程序189
12.4.1 DRIVER.H189
12.4.2 GetDmaInfo例程189
12.4.3 Start I/O更改190
12.4.4 AdapterControl(适配器控制)例程192
12.4.5 DpcForIsr例程193
12.5 编写基于包的总线主控器DMA驱动程序195
12.5.1 建立总线主控器硬件195
12.5.2 支持分散/集中的硬件197
12.5.3 用MapTransfer建立分散/集中列表198
12.6 编写通用缓冲区从属DMA驱动程序201
12.6.1 分配一个通用缓冲区201
12.6.2 使用通用缓冲区从属DMA维护吞吐量202
12.7 编写通用缓冲区总线主控器DMA驱动程序204
12.8 小结206
第13章 Windows管理和设备测试207
13.1 WMI: 业界蓝图207
13.2 WMI体系结构208
13.2.1 在WDM驱动程序中提供WMI支持209
13.2.2 MOF语法210
13.2.3 MOF类定义示例212
13.2.4 编译MOF源文件213
13.2.5 处理WMI IRP请求213
13.2.6 类和实例214
13.2.7 WMILIB215
13.3 WMI概述220
13.4 常规驱动程序事件记录221
13.4.1 事件记录工作原理221
13.4.2 操作消息222
13.4.3 编写消息定义文件223
13.4.4 一个简单的例子224
13.4.5 编译消息定义文件225
13.4.6 把消息资源添加到驱动程序225
13.4.7 把驱动程序注册为事件源226
13.4.8 产生日志项226
13.4.9 分配错误日志包226
13.4.10 记录错误227
13.5 小结228
第14章 系统线程229
14.1 系统线程的定义使用229
14.1.1 使用线程的时机229
14.1.2 建立和终止系统线程230
14.2 线程同步231
14.1.3 管理线程优先权231
14.1.4 系统工作者线程231
14.2.1 时间同步232
14.2.2 一般同步232
14.3 使用调度程序对象233
14.3.1 事件对象234
14.3.2 在驱动程序间共享事件235
14.3.3 互斥对象235
14.3.4 信号量对象236
14.3.5 计时器对象237
14.3.6 线程对象238
14.3.7 互斥对象的变体239
14.3.8 同步死锁240
14.4.1 驱动程序工作原理241
14.4 代码示例: 基于线程的驱动程序241
14.4.2 DEVICE_EXTENSION结构242
14.4.3 AddDevice函数242
14.4.4 DispatchReadWrite函数244
14.4.5 Thread.cpp245
14.4.6 Transfer.c247
14.5 小结253
第15章 分层驱动程序254
15.1 中级驱动程序综述254
15.1.1 中级驱动程序定义254
15.1.2 使用分层体系结构的时机255
15.2 编写分层驱动程序256
15.2.1 分层驱动程序工作原理256
15.2.2 分层驱动程序中的初始化和清除工作257
15.2.3 代码段:连接到另一个驱动程序258
15.2.4 分层驱动程序的其他初始化问题259
15.2.5 分层驱动程序中的I/O请求处理技术259
15.2.6 代码段:调用一个低级驱动程序261
15.3 编写I/O完成例程262
15.3.1 请求I/O完成例程回调262
15.3.2 执行环境262
15.3.3 I/O完成例程进行的工作263
15.3.4 代码段:I/O完成例程264
15.4 分配新增的IRP265
15.4.1 IRP的I/O堆栈再访问266
15.4.2 控制IRP堆栈的大小266
15.4.3 用IoBuildSynchronousFsdRequest建立IRP268
15.4.4 用IoBuildAsynchronousFsdRequest建立IRP269
15.4.5 用IoBuildDeviceIoControlRequest建立IRP270
15.4.6 从零开始建立IRP271
15.4.7 建立低级驱动程序的缓冲区274
15.4.8 跟踪驱动程序分配的IRP274
15.5 编写过滤器驱动程序275
15.5.1 过滤器驱动程序工作原理276
15.5.2 过滤器驱动程序中的初始化和清除工作277
15.5.3 使连接透明278
15.6 代码示例: 过滤器驱动程序278
15.6.1 DEVICE_EXTENSION结构278
15.6.2 DriverEntry函数279
15.6.3 AddDevice函数279
15.6.4 OverriddenDispatchWrite函数281
15.6.6 DispatchPassThru函数283
15.6.5 OverriddenDispatchDeviceIoControl函数283
15.6.7 I/O完成例程284
15.7 编写紧耦合驱动程序286
15.7.1 紧耦合驱动程序工作原理287
15.7.2 紧耦合驱动程序中的初始化和清除工作287
15.8 小结288
第16章 驱动程序安装289
16.1 驱动程序安装概述289
16.2 使用INF文件自动安装289
16.2.1 INF文件结构289
16.2.2 Version节290
16.2.3 Manufacturers节291
16.2.4 Models节291
16.2.5 DDInstall节291
16.2.6 CopyFiles节292
16.2.7 AddReg节293
16.2.8 SourceDisksNames节294
16.2.9 SourceDisksFiles节295
16.3 使用驱动程序的INF文件299
16.3.1 手动安装299
16.3.2 自动安装299
16.3.3 添加/删除硬件向导300
16.3.4 类别名字和设备ID300
16.3.5 定制安装302
16.4 控制驱动程序装载顺序303
16.5 驱动程序数字签名304
16.5.1 Microsoft验证驱动程序的原因304
16.6 小结305
16.5.2 数字签名305
第17章 测试和调试驱动程序306
17.1 驱动程序测试准则306
17.1.1 测试驱动程序的常规方法306
17.1.2 Microsoft硬件兼容性测试308
17.2 驱动程序失败的原因308
17.2.1 驱动程序错误分类309
17.2.2 重演驱动程序错误310
17.2.3 防错性编码策略311
17.2.4 跟踪驱动程序错误311
17.3 阅读故障屏幕312
17.3.1 系统崩溃时发生什么312
17.3.2 蓝色死机屏幕313
17.4.1 源代码调试的关键314
17.4.2 一些WinDbg命令314
17.4 WinDbg综述314
17.5 故障转储分析316
17.5.1 分析的目标316
17.5.2 开始分析316
17.5.3 跟踪堆栈317
17.5.4 间接调查方法319
17.6 交互式调试322
17.6.1 启动和停止一个调试对话322
17.6.2 设置断点323
17.6.3 设置硬断点323
17.6.4 中间输出324
17.7 编写WinDbg扩展324
17.7.1 WinDbg扩展工作原理324
17.7.2 初始化和版本检查函数324
17.7.3 编写扩展命令325
17.7.4 WinDbg助手函数326
17.7.5 建立并使用扩展DLL327
17.8 代码示例: WinDbg扩展327
17.9 其他调试技术332
17.9.1 把已经调试的代码留在驱动程序中332
17.9.2 捕获不正确的假设332
17.9.3 使用故障检验回调函数333
17.9.4 捕获内存泄漏333
17.9.5 使用计数器、位和缓冲区334
17.10 小结336
附录A 驱动程序调试环境337
附录B 故障检验码343
附录C 编译驱动程序354
附录D 关于CD-ROM360