图书介绍

Windows驱动开发技术详解PDF|Epub|txt|kindle电子书版本网盘下载

Windows驱动开发技术详解
  • 张帆,史彩成等编著 著
  • 出版社: 北京:电子工业出版社
  • ISBN:9787121068461
  • 出版时间:2008
  • 标注页数:530页
  • 文件大小:175MB
  • 文件页数:555页
  • 主题词:窗口软件,Windows-驱动程序-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

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

热门推荐