阅读:1228回复:4
各位大虾请推荐一下对初学者比较适合的驱动开发方面的书
各位大虾:
我是初学者,不知道驱动开发方面哪些书比较好啊?能不能推荐几本?无比感谢! |
|
沙发#
发布于:2003-12-12 13:31
Windows WDM 设备驱动程序开发指南 含1CD
作者:(美)Chris Cant著 定价:56元 优惠价:47.6元 本书主要介绍Windows 98和Windows 2000新的驱动程序模型(WDM)。描述了WDM设备驱动程序的结构、功能和开发方法;通过实际的设备驱动程序例子,说明WDM的实现技术、测试和调试方法;介绍了本书提供的一个调试软件Debug Print;说明了如何在客户驱动程序中使用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.2 重叠的异步请求 6 1.3.3 环境 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.9 电源管理 13 2.1.10 WMI 13 2.1.11 NT事件报告 13 2.1.12 系统线程 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.3 操作系统 19 2.3.4 分层的设备驱动程序 19 2.3.5 单一驱动程序 19 2.3.6 建议的和可选的功能 19 2.4 WDM的合理性 19 2.4.1 一个核心模型 20 2.4.2 复杂性 20 2.4.3 即插即用与分层 20 2.4.4 功能范围 21 2.4.5 开发环境 21 2.4.6 开发者支持 21 2.5 小结 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.3.2 内核对象 25 3.3.3 驱动程序例程名称 25 3.4 处理器模型 25 3.4.1 处理器模式 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章 WDM驱动程序环境 33 4.1 系统设置 33 4.1.1 DDK 33 4.1.2 本书配套光盘软件的安装 34 4.1.3 快捷方式 35 4.2 实用程序 35 4.2.1 DOS框 36 4.2.2 计算机管理控制台 36 4.2.3 NT Devices小程序 36 4.2.4 硬件向导 36 4.2.5 注册表编辑器 36 4.2.6 INF编辑器 36 4.2.7 WBEM 36 4.2.8 调试程序 37 4.2.9 NT和Windows 2000实用程序 37 4.2.10 本书配套光盘上的工具 37 4.3 驱动程序目标 37 4.4 驱动程序语言和库 38 4.5 好的代码 39 4.6 build实用程序 39 4.6.1 makefile 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 MakeDrvr 43 4.7.3 目录 44 4.7.4 常见任务 44 4.8 Wdm1驱动程序代码 44 4.8.1 编译器选项 45 4.8.2 头文件 45 4.8.3 驱动程序进入模块 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章 设备接口 74 5.1 设备 74 5.1.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章 测试与调试 92 6.1 测试、测试、再测试 92 6.2 驱动程序测试 92 6.2.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.4.2 检查版本 96 6.4.3 Windows 2000还是Windows 98 96 6.5 调试工具 96 6.5.1 Windows 2000事件 96 6.5.2 跟踪工具 97 6.5.3 驱动程序验证程序 97 6.5.4 调试程序 97 6.6 DebugPrint 97 6.6.1 使用DebugPrint 98 6.6.2 使用DebugPrint Monitor 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.2.4 IRP完成 107 7.3 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 设备栈 125 8.4.1 PnP支持与设备栈 125 8.4.2 设备对象 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.10 IRP_MN_QUERY_RESOURCE_ REQUIREMENTS 153 9.3.11 IRP_MN_QUERY_ RESOURCES 153 9.3.12 IRP_MN_READ_CONFIG 153 9.3.13 IRP_MN_SET_LOCK 153 9.3.14 IRP_MN_WRITE_CONFIG 153 9.4 PnP通知 153 9.4.1 Win32 PnP通知 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.2 Win32电源管理 162 10.1.3 Wdm2Power应用程序 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.5 Windows 98设备管理 195 11.7.6 REG文件 195 11.8 在Windows 98中安装NT式驱动 程序 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.2 事件 233 14.3.3 同步 233 14.3.4 产生跟踪事件 235 14.3.5 链表 236 14.3.6 最后的代码 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 测试WdmIo 261 15.3.1 安装WdmIo 261 15.3.2 LogConfig节 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.1 排队IRP的取消 273 16.4.2 WdmIo 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.2 USB信号 316 20.3.3 总线信号 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 USB客户驱动程序设计 326 21.1.1 UsbKbd的使用 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.3.8 其他问题 342 21.4 UsbKbd的测试 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 HID模型表示 357 22.3.1 HID描述符 357 22.3.2 设备属性 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 |
|
|
板凳#
发布于:2003-12-12 13:19
都是中文的吗?
|
|
地板#
发布于:2003-12-12 11:56
首推walter的书阿,在次是ms的,然后是osr的,等等依此类推
|
|
地下室#
发布于:2003-12-11 16:32
精华区里有。
|
|