《Windows VxD与设备驱动程序权威指南》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:(美)Karen Hazzah著;孙喜明译
  • 出 版 社:北京:中国电力出版社
  • 出版年份:2001
  • ISBN:7508305582
  • 页数:421 页
图书介绍:

什么是驱动程序 1

基于优先权的区分 1

驱动程序接口 1

第1章 入门 1

需要编写哪种驱动程序 2

哪一类设备 2

哪种硬件接口 3

什么是性能需求 4

总结 4

第一部分 Windows执行环境和VxD 7

第2章 Windows的虚拟世界 7

什么是虚拟机 7

基于页面请求的虚拟内存 8

多任务模式 8

处理器的模式 9

保护模式 10

V86模式 10

Windows执行环境 11

总结 12

第3章Windows实现虚拟环境的方法 13

捕获I /O端口的访问 13

捕获内存映射设备 14

捕获中断和异常 15

处理器寄存器 15

进一步分析线性地址和页面映射 16

Win32地址 18

Win16地址 18

Win32、Win16和DOS应用程序的地址 18

DOS地址 19

Windows 3.x如何满足Win16和DOS应用程序的地址需要 20

Windows 9x如何满足Win32、Win16和DOS应用程序的地址需要 22

总结 25

第4章 初识VxD 26

VxD的加载 26

VxD的基本结构 27

设备描述块 28

相关数据结构 29

事件通知 32

静态加载的VxD的初始化和终止消息 34

动态加载的VxD初始化和结束时的消息 34

VM的状态变化消息 35

线程消息 36

Windows 3.x的不同之处 37

总结 37

第5章 最基本的VxD构架 38

开发VxD所需的工具 38

“DDK”版本的源程序 39

DDB和设备控制入口函数:SKELCTRL.ASM 41

VtoolsD版本的SKELETON.VXD 44

Windows 3.x版本的SKELETON 48

总结 49

第6章VxD与硬件交互 62

I/O映射与内存映射 62

与I/O映射的设备交互 62

静态配置的内存映射设备 63

与内存映射的设备交互 63

动态配置的内存映射设备 64

另一种数据传输的方式:DMA 66

使用系统DMA 67

系统DMA缓冲区的条件 67

分配系统DMA缓冲区的函数 69

VDMAD服务一览 70

VDMAD服务的细节 71

使用总线DMA 73

使用VDMAD_Scatter_Lock的正确方法 76

在总线DMA传输中使用事件 78

Windows 3.x的不同之处 79

总结 79

中断和VMM 86

第7章 在VxD中处理硬件中断 86

使用VPICD服务 87

详解CPICD服务函数:VXDIRQ.C 88

汇编转换层和C处理函数 90

HwIntProc回调函数:DDBISE.ASM和VXDISR.C 90

VXDISR的事件处理 91

Windows 3.x的不同之处 92

总结 93

第8章 虚拟世界中的VxD 103

VMM和处理器异常 104

设备所有权 104

虚拟I/O映射设备:PORTTRAP的例子 104

初始化函数:OnDeviceInit 105

处理不同的I/O端口类型:PortTrapThunk 106

检查所有权:PortTrapHandler 107

处理VM_TERMINATE 110

使用PORTTRAP 110

虚拟内存映射设备:PAGETRAP的例子 110

初始化过程 111

异常处理函数 113

处理VM_Terminate消息 115

使用PAGETRAP 115

虚拟硬件中断 115

哪个VM 115

负责硬件中断反射的VxD 117

回调函数:MaskChangeHandler 118

回调函数:HwIntHandler 119

总结 121

回调函数:EOIHandler 121

回调函数:VirtIntHandler和IRETHandler 121

第9章 即插即用:概况 146

PnP组件 146

在Windows 9x安装过程中的PnP组件 148

设备安装过程中的PnP组件 149

启动时的PnP组件 149

总结 153

第10章 即插即用的设备驱动程序VxD 154

PnP VxD的安装 154

关于INF文件 154

PnP的启动过程 156

关闭系统 161

其他的PnP配置情况 161

新的配置 162

删除设备 162

一个PnP驱动程序VxD的例子:TRICORD.VxD 163

RICORD.INF的细节 163

代码详解 165

总结 170

第11章 从应用程序到VxD通信 183

Win16应用程序到VxD:VxD方面 183

从Win16应用程序到VxD:应用程序方面 184

Win16应用程序到VxD:实例代码 185

从Win32应用程序到VxD:VxD方面 191

从Win32应用程序到VxD:应用程序方面 192

Win32到VxD:实例代码 193

总结 197

第12章 从VxD到应用程序的通信 211

从VxD到Win16应用程序调用的困难 211

在Windows 3.x下的VxD PostMessage 212

使用嵌套执行服务 215

在Windows 9x下的VxD PostMessage 218

在Windows 9x下从VxD到Win16应用程序:Appy Time 219

与Win 32相关的技巧:异步过程调用 220

APCVXD例子 220

与Win32相关的技巧:Win32事件 225

VxD和Win32事件 227

总结 232

31位应用程序与16位DLL交互需要转换层 260

为什么DLL驱动程序都是16位的 260

第13章 关于16位的DLL驱动程序 260

第二部分 DLL驱动程序 260

静态和动态库 261

为什么要把驱动程序做成DLL的形式 261

应用程序与DLL 261

DLL和堆栈段 262

DLL和数据段 263

DLL和动态分配的内存之间的关系 263

DLL初始化和结束 264

DLL函数的要求 264

基本的DLL驱动程序 264

创建基本的DLL驱动程序 265

DLL也需要借助于应用程序 266

总结 267

DLL驱动程序的调试工具 267

第14章 DLL驱动程序:与硬件设备交互 271

DLL和端口访问 271

端口映射的例子 271

驱动程序设计中的常规 272

DLL驱动程序 273

访问内存映射的硬件设备 276

内存映射DLL驱动程序的版本 277

关于内存访问的一些高级话题 278

总结 282

第15章 DLL驱动程序:中断处理 291

Windows内存管理策略 291

驱动程序的内存要求 296

可在中断处理时访问的静态代码和数据:简单的方法 297

Windows 3.x下的正确方法 297

动态分配中断期间安全访问的缓冲区:简单的方法 298

动态分配中断期间安全访问的缓冲区:正确的方法 298

安装中断处理函数 301

全新的驱动程序:概述 302

全新的驱动程序:代码 302

总结 306

第16章 DLL驱动程序:使用DMA 323

操作DMA缓冲区的必要条件 323

如何分配DMA缓冲区 323

使用VDMAD服务函数是更好的实现方法 324

与Windows DMA应用程序相关的知识 324

Windows下的DMA DOS应用程序 324

总结 326

第17章 DLL驱动程序:使用实模式服务函数 327

与DOS驱动程序交互 328

IOCTL的特殊处理 329

与TSR交互 330

总结 341

第18章 转换层:在32位中调用16位 353

什么是Flat Thunk 353

转换层的任务 355

转换层的魔术 355

逐步生成转换层 358

逐步构造转换层 361

总结 362

第19章 DLL驱动程序:使用时钟 374

用于周期性通知的时钟 374

使用SetTimer函数 374

挂接INT 1 Ch和INT 8h 375

不要依赖18.2的频率 375

使用timeSetEvent:Pros和Cons 375

如果上述的方法都不管用,那就求助于VxD 376

计算消耗的时间 376

GetTickCount、timeGetTime和QueryPerformanceCounter 377

总结 377

附录 Intel体系结构 378

8086/8088和实模式 378

选择器和描述符 379

80286和保护模式 379

中断和异常 380

保护模式的机制 381

优先级 382

80386和虚拟8086模式 383

附录B 为C语言的VxD调用汇编语言 386

声明DDB 386

为VMM/VxD的回调函数增加转换层 388

介绍封装库 390

WRAPPERS.H 391

关于WRAPPERS.ASM 392

建立函数封装库 396

总结 397

虚拟8086模式 684