图书介绍
Windows驱动开发技术详解PDF|Epub|txt|kindle电子书版本网盘下载
![Windows驱动开发技术详解](https://www.shukui.net/cover/1/32288230.jpg)
- 张帆,史彩成等编著 著
- 出版社: 北京:电子工业出版社
- ISBN:9787121068461
- 出版时间:2008
- 标注页数:530页
- 文件大小:175MB
- 文件页数:555页
- 主题词:窗口软件,Windows-驱动程序-程序设计
PDF下载
下载说明
Windows驱动开发技术详解PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 从两个最简单的驱动谈起2
1.1 DDK的安装2
1.2第一个驱动程序HeoDDK的代码分析3
1.2.1 HelloDDK的头文件4
1.2.2 HelloDDK的入口函数5
1.2.3创建设备例程6
1.2.4卸载驱动例程8
1.2.5默认派遣例程9
1.3 HelloDDK的编译和安装9
1.3.1用DDK环境编译HelloDDK9
1.3.2用VC集成开发环境编译HelloDDK11
1.3.3 HelloDDK的安装14
1.4第二个驱动程序HelloWDM的代码分析16
1.4.1 HelloWDM的头文件16
1.4.2 HelloWDM的入口函数17
1.4.3 HelloWDM的AddDevice例程18
1.4.4 HelloWDM处理PNP的回调函数20
1.4.5 HelloWDM对PNP的默认处理22
1.4.6 HelloWDM对IRP_ MNREMOVE DEVICE的处理23
1.4.7 HelloWDM对其他IRP的回调函数23
1.4.8 HelloWDM的卸载例程24
1.5 HelloWDM的编译和安装24
1.5.1用DDK编译环境编译HelloWDM24
1.5.2 He11oWDM的编译过程25
1.5.3安装HelloWDM25
1.6小结29
第2章Windows操作驱动的基本概念31
2.1 Windows操作系统概述31
2.1.1 Windows家族31
2.1.2 Windows特性32
2.1.3用户模式和内核模式34
2.1.4操作系统与应用程序36
2.2操作系统分层37
2.2.1 Windows操作系统总体架构37
2.2.2应用程序与Wiin32子系统38
2.2.3其他环境子系统40
2.2.4 Native API41
2.2.5系统服务41
2.2.6执行程序组件42
2.2.7驱动程序44
2.2.8内核44
2.2.9硬件抽象层45
2.2.10 Wiindows与微内核45
2.3从应用程序到驱动程序46
2.4小结48
第3章Windows驱动编译环境、安装及调试49
3.1用C语言还是用C++语言49
3.1.1调用约定50
3.1.2函数的导出名52
3.1.3运行时函数的调用53
3.2用DDK编译环境编译驱动程序54
3.2.1编译版本55
3.2.2 nmake工具55
3.2.3 build工具56
3.2.4 makele文件57
3.2.5 dirs文件58
3.2.6 sources文件58
3.2.7 makeleinc文件59
3.2.8 build工具的环境变量60
3.2.9 bud工具的命令行参数61
3.3用VC编译驱动程序62
3.3.1建立驱动程序工程62
3.3.2修改编译选项62
3.3.3修改链接选项63
3.3.4其他修改64
3.3.5 VC编译小结65
3.4查看调试信息66
34.1打印调试语句66
3.4.2查看调试语句67
3.5手动加载NT式驱动68
3.6编写程序加载NT式驱动68
3.6.1 SCM组件和Wiindows服务69
3.6.2加载NT驱动的代码71
3.6.3卸载NT驱动的代码74
3.6.4实验76
3.7 WDM式驱动的加载78
3.7.1 WDM的手动安装78
3.7.2简单的INF文件剖析79
3.8 WDM设备安装在注册表中的变化81
3.8.1硬件子键81
3.82类子键83
3.83服务子键85
3.9小结86
第4章 驱动程序的基本结构87
4.1 Windows驱动程序中重要的数据结构87
4.1.1 驱动对象(DRIVER_OBJECT)87
4.1.2设备对象(DEVICE_OBJECT)89
4.1.3设备扩展91
4.2 NT式驱动的基本结构92
4.2.1驱动加载过程与驱动入口函数(DriverEnt)92
4.2.2创建设备对象95
4.2.3 DriverUnload例程97
4.2.4用WiinObj观察驱动对象和设备对象98
4.2.5用DeviceTree观察驱动对象和设备对象101
4.3 WDM式驱动的基本结构102
4.3.1物理设备对象与功能设备对象102
4.3.2 WDM驱动的入口程序104
4.3.3 WDM驱动的AddDevice例程105
4.3.4 DriverUnload例程107
4.3.5对IRP MN_ REMOVE DEVICE IRP的处理108
4.3.6用Device Tree查看WDM设备对象栈109
4.4设备的层次结构110
4.4.1驱动程序的垂直层次结构111
4.4.2驱动程序的水平层次结构112
4.4.3驱动程序的复杂层次结构112
4.5实验114
4.5.1改写HelloDDK查看驱动结构114
4.5.2改写HelloWDM查看驱动结构116
4.6小结117
第5章Windows内存管理118
5.1内存管理概念118
5.1.1物理内存概念(Physical Memo Addss)118
5.1.2虚拟内存地址概念(Virtual Memory Address)119
5.1.3用户模式地址和内核模式地址120
5.1.4 Windows驱动程序和进程的关系121
5.1.5分页与非分页内存122
5.1.6分配内核内存123
5.2在驱动中使用链表124
5.2.1链表结构124
5.2.2链表初始化125
5.2.3从首部插入链表126
5.2.4从尾部插入链表126
5.2.5从链表删除127
5.2.6实验129
5.3 Lookaside结构130
5.3.1频繁申请内存的弊端130
5.3.2使用Lookaside130
5.3.3实验132
5.4运行时函数133
5.4.1内存间复制(非重叠)133
5.4.2内存间复制(可重叠)134
5.4.3填充内存134
5.4.4内存比较135
5.4.5关于运行时函数使用的注意事项135
5.4.6实验137
5.5使用C++特性分配内存137
5.6其他139
5.6.1数据类型139
5.6.2返回状态值140
5.6.3检查内存可用性142
5.6.4结构化异常处理(try-except块)142
5.6.5结构化异常处理(try-fiinally块)144
5.6.6使用宏需要注意的地方146
5.6.7断言147
5.7小结147
第6章Windows内核函数148
6.1内核模式下的字符串操作148
6.1.1 ASC字符串和宽字符串148
6.1.2 ANSI STRG字符串与UNICODE_ STRG字符串149
6.1.3字符初始化与销毁151
6.1.4字符串复制152
6.1.5字符串比较153
6.1.6字符串转化成大写154
6.1.7字符串与整型数字相互转换155
6.1.8 ANSI STRG字符串与UNICODE STRG字符串相互转换157
6.2内核模式下的文件操作158
6.2.1文件的创建158
6.2.2文件的打开161
6.2.3获取或修改文件属性163
6.2.4文件的写操作166
6.2.5文件的读操作167
6.3内核模式下的注册表操作169
6.3.1创建关闭注册表170
6.3.2打开注册表172
6.3.3添加、修改注册表键值173
6.3.4查询注册表175
6.3.5枚举子项178
6.3.6枚举子键180
6.3.7删除子项182
6.3.8其他183
6.4小结185
第7章 派遣函数186
7.1 IRP与派遣函数186
7.1.1 IRP186
7.1.2 IRP类型188
7.1.3对派遣函数的简单处理188
7.1.4通过设备链接打开设备190
7.1.5编写一个更通用的派遣函数191
7.1.6跟踪IRP的利器IRPTrace193
7.2缓冲区方式读写操作196
7.2.1缓冲区设备196
7.2.2缓冲区设备读写197
7.2.3缓冲区设备模拟文件读写200
7.3直接方式读写操作203
7.3.1直接读取设备204
7.3.2直接读取设备的读写205
7.4其他方式读写操作207
7.4.1其他方式设备207
7.4.2其他方式读写208
7.5 IO设备控制操作209
7.5.1 DeviceIoControl与驱动交互209
7.5.2缓冲内存模式IOCTL210
7.5.3直接内存模式IOCTL212
7.5.4其他内存模式IOCTL214
7.6小结216
第8章 驱动程序的同步处理218
8.1基本概念218
8.1.1问题的引出218
8.1.2同步与异步219
8.2中断请求级219
8.2.1中断请求(IRQ)与可编程中断控制器(PIC)220
8.2.2高级可编程控制器(APIC)221
8.2.3中断请求级(IRQL)221
8.2.4线程调度与线程优先级222
8.2.5 IRQL的变化223
8.2.6 IRQL与内存分页223
8.2.7控制IRQL提升与降低224
8.3自旋锁224
8.3.1原理224
8.3.2使用方法225
8.4用户模式下的同步对象225
8.4.1用户模式的等待226
8.4.2用户模式开启多线程226
8.4.3用户模式的事件227
8.4.4用户模式的信号灯229
8.4.5用户模式的互斥体230
84.6等待线程完成232
8.5内核模式下的同步对象232
8.5.1内核模式下的等待232
8.5.2内核模式下开启多线程234
8.5.3内核模式下的事件对象236
8.5.4驱动程序与应用程序交互事件对象237
8.5.5驱动程序与驱动程序交互事件对象239
8.5.6内核模式下的信号灯240
8.5.7内核模式下的互斥体241
8.5.8快速互斥体243
8.6其他同步方法244
8.6.1使用自旋锁进行同步245
8.6.2使用互锁操作进行同步247
8.7小结249
第9章IRP的同步250
9.1应用程序对设备的同步异步操作250
9.1.1同步操作与异步操作原理250
9.1.2同步操作设备252
9.1.3异步操作设备(方式一)253
9.1.4异步操作设备(方式二)254
9.2IRP的同步完成与异步完成256
9.2.1 IRP的同步完成256
9.2.2 IRP的异步完成257
9.2.3取消IRP262
9.3 StartIO例程264
9.3.1并行执行与串行执行264
9.3.2 StartIO例程265
9.3.3示例267
9.4自定义的StartIO270
9.4.1多个串行化队列270
9.4.2示例271
9.5中断服务例程273
9.5.1中断操作的必要性273
9.5.2中断优先级274
9.5.3中断服务例程(ISR)274
9.6 DPC例程275
9.6.1延迟过程调用例程(DPC)275
9.6 2 DpcForISR275
9.7小结276
第10章 定时器277
10.1定时器实现方式一277
10.1.1 I/O定时器277
10.1.2示例代码278
10.2定时器实现方式二280
10 2.1 DPC定时器280
102.2示例代码282
10.3等待284
10.3.1第一种方法:使用KeWaitForSingleObject284
10.3.2第二种方法:使用KeDelayExecutionThread285
10.3.3第三种方法:使用KeStallExecutionProcessor285
10.3.4第四种方法:使用定时器286
10.4时间相关的其他内核函数286
10.4.1时间相关函数286
10.4.2示例代码288
10.5 RP的超时处理289
10.5.1原理289
10.5.2示例代码289
10.6小结291
第11章 驱动程序调用驱动程序292
11.1以文件句柄形式调用其他驱动程序292
11.1.1准备一个标准驱动292
11.1.2获得设备句柄294
11.1.3同步调用295
11.1.4异步调用方法一297
11.1.5异步调用方法二299
11.1.6通过符号链接打开设备301
11.2通过设备指针调用其他驱动程序303
11.2.1用IoGetDeviceObjectPointer获得设备指针304
11.2.2创建IRP传递给驱动的派遣函数305
11.2.3用IoBuildSynchronousFsdRequest创建IRP306
11.2.4用IoBuildAsynchronousFsdRequest创建IRP308
11.2.5用IoAllocateIrp创建IRP311
11.3其他方法获得设备指针314
11.3.1用ObReferenceObjectByName获得设备指针314
11.3.2剖析IoGetDeviceObjectPointer317
11.4小结318
第12章 分层驱动程序319
12.1分层驱动程序概念319
12.1.1分层驱动程序的概念319
12.1.2设备堆栈与挂载321
12.1.3 I/O堆栈322
12.1.4向下转发IRP323
12.1.5挂载设备对象示例324
12.1.6转发IRP示例325
12.1.7分析326
12.1.8 遍历设备栈327
12.2完成例程330
12.2.1完成例程概念330
12.2.2传播Pending位332
12.2.3完成例程返回STATUS_SUCCESS333
12.2.4完成例程返回STATUS_MORE_PROCESSING_REQUIRED334
12.3将IRP分解成多个IRP336
12.3.1原理336
12.3.2准备底层动337
12.3.3读派遣函数338
12.3.4完成例程341
12.3.5分析342
12.4 WDM驱动程序架构344
12.4.1 WDM与分层驱动程序344
12.4.2 WDM的加载方式345
12.4.3功能设备对象346
12.4.4物理设备对象346
12.4.5物理设备对象与即插即用348
12.5小结349
第13章 让设备实现即插即用350
13.1即插即用概念350
13.1.1历史原因350
13.1.2即插即用的目标351
13.1.3 Wiindows中即插即用相关组件351
13.1.4遗留动程序352
13.2即插即用IRP352
13.2.1即插即用IRP的功能代码353
13.2.2处理即插即用IRP的派遣函数353
13.3通过设备接口寻找设备356
13.3.1设备接口356
13.3.2 WDM驱动中设置接口357
13.3.3应用程序寻找接口359
13.3.4查看接口设备360
13.4启动和停止设备361
13.4.1为一个实际硬件安装HelloWDM362
13.4.2启动设备364
134.3转发并等待366
13.4.4获得设备相关资源367
13.4.5枚举设备资源368
13.4.6停止设备372
13.5即插即用的状态转换373
13.5.1状态转换图373
13.5.2 IRP MN_QUERY STOP DEVICE374
13.5.3 IRP_ MN_QUERY REMOVE DEVICE374
13.6其他即插即用IRP375
13.6.1 IRP_MN_FILTER_RESOURCE REQUIRENTS375
13.6.2 IRP_MN_QUERY CAPABILITIES376
13.7小结377
第14章 电源管理378
14.1 WDM电源管理模型378
14.1.1概述378
14.1.2热插拔378
14.1.3电源状态379
14.1.4设备状态379
14.1.5状态转换380
14.2处理IRP_MJ_POWER381
14.3处理IRP_MN_QUERY CAPABILITIES381
14.3.1 DEVICECAPABILITIES381
14.3.2一个试验382
14.4小结384
第15章1/O端口操作386
15.1概述386
15.1.1从DOS说起386
15.1.2汇编实现387
15.1.3 DDK实现389
15.2工具软件WinIO390
15.2.1 WiinIO简介390
15.22使用方法390
15.3端口操作实现方法一391
15.3.1驱动端程序391
15.3.2应用程序端程序393
15.4端口操作实现方法二394
15.4.1驱动端程序394
15.4.2应用程序端程序396
15.5端口操作实现方法三397
15.5.1驱动端程序397
15.5.2应用程序端程序398
15.6端口操作实现方法四399
15.6.1原理399
15.6.2 驱动端程序400
15.6.3应用程序端程序401
15.7驱动PC喇叭402
15.7.1可编程定时器402
15.7.2 PC喇叭403
15.7.3操作代码404
15.8操作并口设备405
15.8.1并口设备简介405
15.8.2并口寄存器406
15.8.3并口设备操作408
15.9小结410
第16章PCI设备驱动411
16.1 PCI总线协议411
16.1.1 PCI总线简介411
16.1.2 PCI配置空间简介412
16.2访问PCI配置空间方法一414
16.2.1两个重要寄存器414
16.2.2示例415
16.3访问PCI配置空间方法二417
16.3.1 DDK函数读取配置空间417
16.3.2示例418
16.4访问PCI配置空间方法三419
16.4.1通过即插即用IRP获得PCI配置空间420
164.2示例420
16.5访问PCI配置空间方法四421
16.5.1创建IRP MN READ CONFIG422
16.5.2示例422
16.6 PCI设备驱动开发示例423
16.6.1开发步骤424
16.6.2中断操作424
16.6.3操作设备物理内存425
16.6.4示例426
16.7小结429
第17章USB设备驱动430
17.1 USB总线协议430
17.1.1 USB设备简介430
17.1.2 USB连接拓扑结构431
17.1.3 USB通信的流程433
17.1.4 USB四种传输模式435
17.2 Windows下的USB驱动438
17.2.1观察USB设备的工具438
17.2.2 USB设备请求440
17.2.3设备描述符440
17.2.4配置描述符442
17.2.5接口描述符443
17.2.6端点描述符443
17.3 USB驱动开发实例444
17.3.1功能驱动与物理总线驱动444
17.3.2构造USB请求包445
17.3.3发送USB请求包446
17.3.4 USB设备初始化447
17.3.5 USB设备的插拔447
17.3.6 USB设备的读写448
17.4小结450
第18章SDI O设备驱动451
18.1 SDIO协议451
18.1.1 SD内存卡概念451
18.1.2 SDIO卡概念452
18.1.3 SDIO总线452
18.1.4 SDIO令牌453
18.1.5 SDIO令牌格式455
18.1.6 SDIO的寄存器456
18.1.7 CMD52命令458
18.1.8 CMD53命令459
18.2 SDIO卡驱动开发框架459
18.2.1 SDIO Host Controller驱动459
18.2.2 SDIO卡的初始化460
18.23中断回调函数461
18.2.4获得和设置属性462
18.2 5 CMD52464
18.2 6 CMD53465
18.3 SDIO开发实例467
18.4小结467
第19章 虚拟串口设备驱动469
19.1串口简介469
19.2 DDK串口开发框架470
19.2.1串口驱动的入口函数470
19.2.2应用程序与串口驱动的通信473
19.2.3写的实现475
19.2.4读的实现477
19.3小结478
第20章 摄像头设备驱动程序479
20.1 WDM摄像头驱动框架479
20.1.1类驱动与小驱动479
20.1.2摄像头的类驱动与小驱动480
20.1.3编写小驱动程序480
20.1.4小驱动的流控制481
20.2虚拟摄像头开发实例482
20.2.1编译和安装482
20.2.2虚拟摄像头入口函数484
20.2.3对STREAM_REQUEST_BLOCK的处理函数485
20.2.4打开视频流487
20.2.5对视频流的读取488
20.3小结489
第21章 再论IRP492
21.1转发IRP492
21.1.1直接转发492
21.1.2转发并且等待492
21.1.3转发并且设置完成例程494
21.1.4暂时挂起当前IRP495
21.15不转发IRP496
21.2创建IRP496
21.2.1 IoBuildDeviceIoControiRequest497
21.2.2创建有超时的IOCTL IRP498
21.2.3用IoBuildSynchronousFsdRequest创建IRP499
21.2.4关于IoBuildAsynchronousFsdRequest501
21.2.5关于IoAllocateIrp502
21.3小结505
第22章 过滤驱动程序506
22.1文件过滤驱动程序506
22.1.1过滤驱动程序概念506
22.1.2过滤驱动程序的入口函数506
22.1.3 U盘过滤驱动程序509
22.1.4过滤驱动程序加载方法一510
22.1.5过滤驱动程序加载方法二511
22.1.6过滤驱动程序的AddDevice例程512
22.1.7磁盘命令过滤513
22.2 NT式过滤驱动程序516
22.2.1 NT式过滤驱动程序516
22.2.2 NT过滤驱动的入口函数517
22.2.3挂载过滤驱动517
22.2.4过滤键盘读操作518
22.3小结520
第23章 高级调试技巧521
23.1一般性调试技巧521
23.1.1打印调试信息521
23.1.2存储dump信息521
23.1.3使用WiinDbg调试工具522
23.2高级内核调试技巧524
23.2.1安装VMWare525
23.2.2在虚拟机上加载驱动程序526
23.2.3 VMWare和WiinDbg联合调试驱动程序527
23.3用IRPTrace调试驱动程序528
23.4小结530