《Windows WDM设备驱动程序开发指南》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:(美)(C.坎特)Chris Cant著;孙义等译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2000
  • ISBN:7111077091
  • 页数:404 页
图书介绍:本书主要介绍Windows 98和Windows 2000新的驱动程序模型(WDM)。描述了WDM设备驱动程序的结构、功能和开发方法;通过实际的设备驱动程序例子,说明WDM设备驱动程序的实现技术、测试和调试方法;介绍了本书提供的一个调试软件DebugPrint;说明如何在客户驱动程序中使用USB驱动程序接口(USBDI)访问USB设备,以及如何利用HID类驱动程序以标准方法访问多种输入设备。

第1章 引言 1

1.1 Windows驱动程序模型 1

1.1.1 WDM与NT式驱动程序 2

1.1.2 可用的驱动程序 3

1.1.3 本书配套光盘 3

1.1.4 设备驱动程序软件工具 3

1.1.5 未讨论的驱动程序类型 4

1.2 新的思维方式 4

1.2.1 设备驱动程序环境 4

1.2.2 术语与资源 5

1.3 Win32程序接口 5

1.3.1 基本I/O 5

1.3.3 环境 6

1.3.2 重叠的异步请求 6

1.3.4 设备特定的限制 7

1.3.5 驱动程序的其他Win32访问 7

1.4 小结 7

第2章 概述 8

2.1 设备驱动程序的组成部分 8

2.1.1 驱动程序入口点和回调例程 9

2.1.2 分发例程 10

2.1.3 创建设备 11

2.1.4 硬件资源分配 11

2.1.5 调用其他驱动程序 11

2.1.6 串行硬件的访问 12

2.1.7 访问硬件 12

2.1.8 硬件问题 12

2.1.12 系统线程 13

2.1.11 NT事件报告 13

2.1.9 电源管理 13

2.1.10 WMI 13

2.2 设备驱动程序的类型 14

2.2.1 Windows概述 14

2.2.2 I/O请求处理 14

2.2.3 即插即用设备栈 15

2.2.4 标准总线驱动程序和类驱动程序 16

2.2.5 驱动程序栈举例 17

2.3 驱动程序选择 18

2.3.1 现成的驱动程序 18

2.3.2 使用标准驱动程序 18

2.3.5 单一驱动程序 19

2.3.6 建议的和可选的功能 19

2.4 WDM的合理性 19

2.3.3 操作系统 19

2.3.4 分层的设备驱动程序 19

2.4.1 一个核心模型 20

2.4.2 复杂性 20

2.4.3 即插即用与分层 20

2.4.6 开发者支持 21

2.5 小结 21

2.4.5 开发环境 21

2.4.4 功能范围 21

第3章 设备驱动程序设计 22

3.1 引言 22

3.2 驱动程序设计指南 22

3.2.1 文档 22

3.2.2 好的设计 22

3.3 内核调用 23

3.3.1 内核宏 24

3.4.1 处理器模式 25

3.4 处理器模型 25

3.3.2 内核对象 25

3.3.3 驱动程序例程名称 25

3.4.2 中断级 26

3.5 使用内存 27

3.5.1 内存池 27

3.5.2 旁视列表 28

3.5.3 其他的内存考虑 28

3.5.4 访问用户应用程序内存 29

3.5.5 DMA 29

3.6 IRP处理 29

3.6.1 IRP参数 30

3.6.2 在驱动程序栈中处理IRP 30

3.7 小结 31

4.1 系统设置 33

4.1.1 DDK 33

第4章 WDM驱动程序环境 33

4.1.2 本书配套光盘软件的安装 34

4.1.3 快捷方式 35

4.2 实用程序 35

4.2.4 硬件向导 36

4.2.7 WBEM 36

4.2.6 INF编辑器 36

4.2.5 注册表编辑器 36

4.2.3 NT Devices小程序 36

4.2.2 计算机管理控制台 36

4.2.1 DOS框 36

4.2.8 调试程序 37

4.2.9 NT和Windows 2000实用程序 37

4.2.10 本书配套光盘上的工具 37

4.3 驱动程序目标 37

4.4 驱动程序语言和库 38

4.6.1 makefile 39

4.5 好的代码 39

4.6 build实用程序 39

4.6.2 SOURCES 40

4.6.3 makefile文件 40

4.6.4 build目录 41

4.6.5 其他build步骤 41

4.6.6 DIRS文件 42

4.7 VC++项目 42

4.7.1 Makefile构造环境 42

4.7.2 MarkDrvr 43

4.7.3 目录 44

4.7.4 常见任务 44

4.8 Wdm1驱动程序代码 44

4.8.2 头文件 45

4.8.3 驱动程序进入模块 45

4.8.1 编译器选项 45

4.8.4 版本资源 46

4.8.5 访问注册表 46

4.8.6 UNICODE_STRING结构 48

4.9 安装Wdm1 50

4.10 安装详细信息 50

4.10.1 INF文件 50

4.10.2 注册表 51

4.10.3 Windows 2000对象 51

4.11 设备和驱动程序的管理 51

4.11.1 添加另一个设备 51

4.11.2 删除设备 51

4.11.3 更新驱动程序 52

4.11.4 NT式驱动程序 52

4.12 小结 52

5.1.1 设备访问 74

第5章 设备接口 74

5.1 设备 74

5.1.2 后续的I/O 75

5.2 设备对象和设备扩展 75

5.3 设备对象的创建和删除 76

5.3.1 创建设备 77

5.3.2 删除设备 78

5.4 设备名 78

5.5 设备接口 80

5.6 Win32设备接口访问 82

5.6.1 得到设备的接口名 83

5.6.2 运行Wdm1Test 84

5.7 小结 86

6.2 驱动程序测试 92

6.2.1 测试所有的函数是否都工作 92

第6章 测试与调试 92

6.1 测试、测试、再测试 92

6.2.2 Windows 2000和Windows 98 93

6.2.3 多处理器 93

6.2.4 取消I/O 93

6.3 调试 94

6.4 调试技术 95

6.4.1 递增式的开发 95

6.5 调试工具 96

6.5.1 Windows 2000事件 96

6.4.2 检查版本 96

6.4.3 Windows 2000还是Windows 98 96

6.5.2 跟踪工具 97

6.5.3 驱动程序验证程序 97

6.5.4 调试程序 97

6.6 DebugPrint 97

6.6.2 使用DebugPrint Monitor 98

6.6.1 使用DebugPrint 98

6.6.3 在驱动程序中使用DebugPrint 99

6.7 关于调试的说明 101

6.7.1 更新驱动程序 101

6.7.2 驱动程序在引导时失败 101

6.7.3 驱动程序依赖性 101

6.7.4 未取消的IRP 101

6.8 错误检查代码 102

6.9 小结 104

第7章 分发例程 105

7.1 分发例程IRP 105

7.2 I/O请求包 105

7.2.1 分发例程处理 105

7.2.2 可重入性 106

7.2.3 IRP处理 106

7.3 IRP结构 107

7.2.4 IRP完成 107

7.4 常用的IRP参数 109

7.4.1 “创建”IRP,IRO_MJ_CREATE 109

7.4.2 “关闭”IRP,IRP_MJ_CLOSE 109

7.4.3 “读”IRP,IRP_MJ_READ 110

7.4.4 “写”IRP,IRP_MJ_WRITE 110

7.4.5 IOCTL IRP,IRP_MJ_IOCTL 110

7.5 用户缓冲区 110

7.5.1 缓冲I/O 110

7.5.2 直接I/O 110

7.5.3 其他I/O方式 111

7.5.4 DeviceIoControl缓冲区 111

7.6 Wdm1分发例程 111

7.6.1 创建和关闭 112

7.6.2 写 113

7.6.3 读 115

7.6.4 IOCTL 115

7.6.5 系统控制 116

7.7 小结 116

第8章 即插即用与设备栈 117

8.1 设计概述 117

8.1.1 设计目标 117

8.1.2 即插即用系统 118

8.2 即插即用消息 121

8.3 设备枚举 123

8.3.1 固定的和可配置的设备 123

8.3.2 枚举 123

8.3.3 设备树 124

8.4.2 设备对象 125

8.4.1 PnP支持与设备栈 125

8.4 设备栈 125

8.5 上沿 126

8.5.1 USB键盘例子 126

8.5.2 功能设备对象和物理设备对象 128

8.5.3 上沿定义 128

8.6 小结 129

第9章 即插即用的实现 130

9.1 实现即插即用 130

9.1.1 添加和删除设备 131

9.1.2 基本的PnP处理程序 131

9.1.3 沿设备栈向下传递不支持的IRP 135

9.1.4 PnP状态和消息 135

9.1.5 状态标志 136

9.1.6 保持IRP 137

9.1.7 打开的句柄 138

9.1.8 处理PnP IRP的时间 139

9.1.9 实现资源分配 145

9.2 测试Wdm2 150

9.3 其他PnP IRP 151

9.3.1 IRP_MN_DEVICE_USAGE_NOTIFICATION 151

9.3.2 IRP_MN_FILTER_RESOURCE_REQUIREMENTS 151

9.3.3 IRP_MN_QUERY_BUS_INFORMATION 151

9.3.4 IRP_MN_QUERY_CAPABILITIES 151

9.3.5 IRP_MN_QUERY_DEVICE_RELATIONS 152

9.3.6 IRP_MN_QUERY_DEVICE_TEXT 152

9.3.7 IRP_MN_QUERY_ID 152

9.3.8 IRP_MN_QUERY_INTERFACE 152

9.3.9 IRP_MN_QUERY_PNP_DEVICE_STATE 152

9.3.14 IRP_MN_WRITE_CONFIG 153

9.4.1 Win32 PnP通知 153

9.4 PnP通知 153

9.3.12 IRP_MN_READ_CONFIG 153

9.3.13 IRP_MN_SET_LOCK 153

9.3.11 IRP_MN_QUERY_RESOURCES 153

9.3.10 IRP_MN_QUERY_RESOURCE_REQUIREMENTS 153

9.4.2 设备驱动程序PnP通知 157

9.4.3 通知请求驱动程序交互 158

9.5 高级的即插即用 158

9.5.1 总线驱动程序 158

9.5.2 发送PnP IRP 159

9.5.3 设备属性 160

9.6 小结 160

第10章 电源管理 161

10.1 电源概述 161

10.1.1 ACPI* 161

10.1.3 Wdm2Power应用程序 162

10.1.2 Win32电源管理 162

10.1.4 电池小类驱动程序 163

10.2 系统电源策略 163

10.3 电源IRP 164

10.4 处理电源IRP 165

10.4.1 处理设备电源IRP 165

10.4.2 处理系统电源IRP 165

10.4.3 不处理电源IRP 167

10.5 设备电源策略主 167

10.6 处理“设置电源”IRP 169

10.6.1 设置系统电源状态 171

10.6.2 设置设备电源状态 174

10.6.3 SetPowerState 174

10.7 分发例程的电源处理 175

10.8 测试Wdm2电源功能 175

10.9 设备功能 176

10.10 高级电源管理 177

10.10.1 唤醒 177

10.10.2 电源顺序 178

10.10.3 停止系统关闭事件 178

10.10.4 电源通知 178

10.10.5 检测系统电源状态变化 178

10.10.6 WMI支持 178

10.11 小结 179

第11章 安装 180

11.1 WDM驱动程序的安装过程 180

11.2 INF文件 180

11.3 标准节 181

11.4 INF文件的节层次结构 182

11.4.1 Wdm1Free.INF 183

11.4.2 InfEdit 186

11.5 跨平台和WDM INF文件 187

11.5.1 在Windows 2000中安装Wdm1 188

11.5.2 Windows 2000服务注册表项 188

11.6 查找驱动程序 189

11.6.1 硬件ID 190

11.6.2 兼容ID 190

11.6.3 重复枚举 191

11.7 NT式驱动程序的安装 191

11.7.1 安装过程 192

11.7.2 驱动程序的装入顺序 193

11.7.3 NT 4控制面板Devices小程序 193

11.7.4 Windows 2000设备管理 194

11.7.6 REG文件 195

11.8 在Windows 98中安装NT式驱动程序 195

11.7.5 Windows 98设备管理 195

11.9 小结 196

第12章 WMI 204

12.1 概述 204

12.1.1 WBEM模型 205

12.1.2 WDM提供者 205

12.2 一个WMI驱动程序 207

12.2.1 WMI构造环境 209

12.2.2 注册为WMI数据提供者 210

12.2.3 处理系统控制IRP 211

12.2.4 QueryWmiRegInfo处理程序 213

12.2.5 QueryWmiDataBlock处理程序 213

12.2.6 SetWmiDataBlock处理程序 215

12.2.7 SetWmiDataItem处理程序 216

12.2.8 ExecuteWmiMethod处理程序 217

12.2.9 触发WMI事件 218

12.3 WMI运行 219

12.4 小结 220

第13章 事件的报告 221

13.1 概述 221

13.2 消息文件 222

13.3 注册为事件源 224

13.4 事件的产生 225

13.5 Wdm3事件的测试 228

13.6 小结 228

第14章 DebugPrint 229

14.1 设计规范 229

14.2 设计实现 229

14.3 测试驱动程序代码 230

14.3.1 系统线程 230

14.3.3 同步 233

14.3.2 事件 233

14.3.4 产生跟踪事件 235

14.3.5 链表 236

14.3.5 最后的代码 238

14.4 DebugPrint驱动程序 239

14.4.1 设计 240

14.4.2 DebugPrint设备 240

14.4.3 读队列 241

14.4.4 取消IRP 242

14.4.5 写算法 244

14.4.6 读算法 245

14.5 DebugPrint Monitor 246

14.5.1 设计 247

14.5.2 Win32工作者线程 247

14.5.3 DebugPrint_Event类 247

14.5.4 Win32重叠I/O 248

14.6 小结 251

第15章 WdmIo和PHDIo驱动程序 252

15.1 Win32接口 252

15.1.1 IOCTL 253

15.1.2 命令 253

15.2 LPT打印机驱动程序的应用程序 254

15.2.1 并行端口 254

15.2.2 WdmoIoTest 255

15.2.3 PHDIoTest 255

15.2.4 发出命令 256

15.2.5 使用中断驱动的I/O写数据 258

15.2.6 使用中断驱动的I/O读数据 260

15.3.1 安装WdmIo 261

15.3.2 LogConfig节 261

15.3 测试WdmIo 261

15.3.3 运行WdmIoTest 262

15.4 测试PHDIo 263

15.4.1 安装PHDIo 263

15.4.2 运行PHDIoTest 263

15.5 WdmIo和PHDIo的分析 264

15.5.1 使用哪一个 264

15.5.2 缺陷 264

15.6 小结 265

第16章 硬件I/O IRP的排队 266

16.1 硬件访问 266

16.2 IRP队列 267

16.2.1 设备队列 267

16.2.2 StartIo例程 268

16.3 命令的处理 271

16.4 取消排队的IRP 272

16.4.2 WdmIo IRP取消策略 273

16.4.1 排队IRP的取消 273

16.4.3 另一种取消策略 274

16.5 “清理”IRP的处理 275

16.6 测试、取消和清理 277

16.7 补充设备队列 278

16.8 小结 282

第17章 中断驱动的I/O 283

17.1 中断处理 283

17.1.1 中断的性质 283

17.1.2 连接到中断 284

17.2 WdmIo读与写 285

17.3 中断处理程序 288

17.4 延迟过程调用 289

17.4.1 使用基本的DPC 290

17.4.2 自定义DPC 291

17.5 定时器 292

17.5.1 1秒间隔定时器 292

17.5.2 WdmIo超时 292

17.5.3 自定义定时器 293

17.6 小结 294

第18章 NT硬件 295

18.1 NT式驱动程序的构造 295

18.1.1 DDK问题 295

18.1.2 编译环境 296

18.1.3 NT式驱动程序结构 296

18.2 设备的创建与删除 296

18.3 资源分配 298

18.4 资源转换 304

18.5 资源的查找 305

18.5.1 自动检测的硬件 306

18.5.2 查询可配置总线 308

18.5.3 最后的资源查找技术 309

18.6 小结 309

第19章 WDM系统驱动程序 310

19.1 客户驱动程序的编写 310

19.2 过滤驱动程序 311

19.3 NT层次 311

19.4 小结 312

第20章 通用串行总线 313

20.1 设备类 313

20.2 概述 314

20.2.1 Windows USB驱动程序接口 314

20.2.2 传输类型 315

20.3 USB低级结构 315

20.3.1 USB设备 315

20.3.3 总线信号 316

20.3.2 USB信号 316

20.3.4 低层协议 317

20.3.5 电源 318

20.4 USB设备框架 318

20.4.1 总线枚举 318

20.4.2 标准控制事务 319

20.4.3 描述符 320

20.4.4 驱动程序安装 321

20.4.5 USB类 321

20.4.6 新增功能 322

20.5 客户驱动程序设计 323

20.5.1 端点类型选择 323

20.5.2 等时设备 323

20.6 小结 324

第21章 USB驱动程序接口 325

21.1.1 UsbKbd的使用 326

21.1 USB客户驱动程序设计 326

21.1.2 UsbKbd安装 327

21.1.3 头文件和库 328

21.2 USBDI的IOCTL 328

21.2.1 URB 329

21.2.2 USBDI的调用 330

21.2.3 多个USBDI调用 332

21.3 访问USB 332

21.3.1 初始化USB设备 332

21.3.2 发出URB 334

21.3.3 选择接口 335

21.3.4 其他初始化 338

21.3.5 取消配置的选择 338

21.3.6 中断传输 338

21.3.7 控制传输 341

21.4 UsbKbd的测试 342

21.3.8 其他问题 342

21.5 USBDI结构参考 346

21.6 USBDI URB参考 348

21.6.1 URB设置功能 348

21.6.2 URB传输功能 350

21.6.3 URB缺省管道功能 351

21.6.4 URB等时帧功能 352

21.7 小结 352

第22章 人工输入设备模型 353

22.1 HID概述 353

22.2 HID模型 354

22.2.1 报告 354

22.2.2 用法 355

22.2.3 获取HID功能 356

22.3.2 设备属性 357

22.3.1 HID描述符 357

22.3 HID模型表示 357

22.3.3 报告描述符 358

22.6 小结 363

第23章 HID客户 364

23.1 HID类驱动程序 364

23.1.1 HID类驱动程序特征 364

23.1.2 Windows HID客户程序 365

23.1.3 头文件 366

23.1.4 HID USB小驱动程序 366

23.1.5 USB启动设备 367

23.2 用户态HID客户程序 367

23.2.1 查找HID设备 368

23.2.2 读取HID功能 368

23.2.3 读取输入报告 372

23.2.4 发送输出报告 374

23.2.5 其他用户态HID客户函数 376

23.2.6 运行HidKbdUser 376

23.3 内核态HID客户程序 379

23.3.1 客户程序类型 379

23.3.2 PnP通知 380

23.3.3 HidKbd设备 381

23.3.4 读取HID功能 386

23.3.5 HidKbd设备的打开和关闭 387

23.3.6 数据的读写 387

23.3.7 其他HID类IOCTL 392

23.4 小结 392

附录A 信息资源 393

附录B PC99 396

附录C 直接存储器访问 400

附录D 词汇表 401