实用技术:Windows NT与Windows 2000设备驱动及开发

实用技术:Windows NT与Windows 2000设备驱动及开发
作 者: (美)[P.G.威斯卡罗拉]Peter G.Viscarola,(美)[W.A.梅森]W.Anthony Mason著;新智工作室译;新智工作室译
出版社: 电子工业出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: Windows
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

暂缺《实用技术:Windows NT与Windows 2000设备驱动及开发》作者简介

内容简介

本书从结构设计和实用的角度出发,对Windows NT和Windows 2000的标准核心模式驱动程序做了深刻描述。它不仅解释了如何设计和开发这些驱动程序,而且介绍了怎样去编辑、连接和编译它们。本书将重点集中在标准核心模式驱动程序上,从简单的并行或串行端口设备驱动到复杂的以DMA为基础的实时视频加密设备驱动,本书介绍的标准核心模式驱动程序都是首屈一指的。全书有四大部分,第一部分介绍了Windows NT的结构,第二部分详述了管理器及设备驱动程序,第三部分叙述了替换式NT驱动程序结构,第四部分主要介绍了Windows 2000与NT4.0设备驱动程序的差别。

图书目录

第一部分 Windows NT的体系结构

第1章 Windows NT操作系统概述

1.1 Windows NT主要特点

1.1.1 多线程

1.1.2 多任务

1.1.3 按需分页的虚拟内存

1.1.4 多处理

1.1.5 处理器体系结构独立性

1.1.6 微核模型

1.1.7 集成化的网络功能

1.1.8 多操作系统仿真

1.2 用户模式程序和环境子系统

1.2.1 绕过环境子系统

1.2.2 本地Windows NT API

1.2.3 Win32环境子系统

1.3 Windows NT可执行层

1.3.1 I/O管理器

1.3.2 对象管理器

1.3.3 安全引用监视器

1.3.4 进程管理器

1.3.5 局部过程调用工具

1.3.6 内存管理器和高速缓存管理器

1.3.7 Win32支持部件

1.4 Windows NT微核

1.5 硬件抽象层

第2章 通过HAL获得硬件独立性

2.1 HAL在Windows NT操作系统中的作用

2.2 设备寻址

2.3 I/O结构

2.3.1 为设备访问选择正确的HAL函数

2.3.2 HAL缓冲区函数

2.4 中断管理

2.5 DMA(直接内存访问)操作

2.6 其他的HAL工具

2.7 HAL所不处理的处理器结构差别

第3章 虚拟内存

3.1 按需分页的虚拟内存

3.1.1 按需分页虚拟内存的原理

3.1.2 内存管理器的操作

3.1.3 地址空间分隔和控制

3.1.4 内存共享

3.1.5 拷贝—写入

3.1.6 内存映射文件

3.1.7 分页

3.1.8 地址转换

3.1.9 页表

3.1.10 从虚拟到物理的地址转换

3.1.11 虚拟地址描述符

3.1.12 环境

3.2 物理内存管理

3.2.1 页框数据库

3.2.2 页面恢复算法

3.2.3 部分对象(Section Object)

3.3 内存管理器调整(Tuning)

3.4 驱动程序和虚拟内存(VM)

3.4.1 内存描述符列表(Memory Descriptor Lists)

3.4.2 结构化例外处理(Structured Exception Handling)

第4章 注册表

4.1 查看和修改注册表

4.2 注册表组织结构(Registry Organiztion)

4.2.1 子关键字(Subkey)、值(Value)和数据类型

4.2.2 管理宽字符串

4.3 设备驱动程序开发者关心的注册表关键字

4.3.1 硬件(HARDWARE)

4.3.2 软件(SOFTWARE)

4.3.3 SYSTEM子关键字和控制设置

第5章 分派和调度

5.1 分派

5.2 调度

5.2.1 线程优先级

5.2.2 优先占用

5.2.3 调度对驱动程序的影响

第6章 中断请求等级和DPC(延迟过程调用)

6.1 了解中断请求等级(IRQL)

6.1.1 IRQL并不是调度优先级

6.1.2 决定IRQL

6.2 如何使用IRQL

6.2.1 IRQL PASSIVE_LEVEL

6.2.2 IRQL APC_LEVEL

6.2.3 IRQL DISPATCH_LEVEL

6.2.4 DIRQL

6.2.5 IRQL HIGH_LEVEL

6.3 延迟过程调用(DPC)

6.3.1 DPC对象

6.3.2 DPC的调用和服务

6.3.3 DPC对象特点

6.4 DpcForIsr

第7章 多处理器问题

7.1 共享数据的问题

7.2 使用锁定(Lock)来完成序列访问共享数据

7.3 互锁

7.3.1 运行型互锁

7.3.2 中断型互锁

7.3.3 在单处理器系统中运行互锁

7.4 互锁的问题

第二部分 I/O管理器和设备驱动程序的具体细节

第8章 I/O结构

8.1 可编程的I/O设备

8.2 总线控制器DMA设备

8.2.1 两类总线控制器DMA设备

8.2.2 逻辑地址

8.2.3 分散/集中(Scatter/Gather)

8.3 系统DMA设备

第9章 I/O管理器

9.1 I/O子系统设计特点

9.2 NT I/O子系统具有一致性并且高度结构化

9.2.1 NT I/O子系统跨平台可移植性

9.3 NT I/O子系统是可配置的

9.4 NT I/O子系统

9.5 NT I/O子系统是多处理器安全的

9.6 NT I/O子系统是基于对象的

9.6.1 文件对象

9.6.2 驱动程序对象

9.6.3 设备对象

9.6.4 中断对象

9.6.5 适配器对象

9.7 NT I/O子系统是异步的

9.8 NT I/O子系统是包驱动的

9.9 NT I/O子系统是分层的

第10章 如何描述I/O请求

10.1 IRP结构

10.1.1 IRP固定部分的域

10.1.2 IRP I/O堆栈位置中的域

10.2 数据缓冲区的描述

10.2.1 直接I/O描述数据缓冲区

10.2.2 使用缓冲的I/O描述数据缓冲区

10.2.3 使用非I/O数据缓冲区描述

10.2.4 评价可使用的数据缓冲区描述符选项

10.3 I/O函数代码

10.3.1 理解设备I/O控制函数(IOCTL)

10.3.2 定义客户的IOCTL

10.3.3 I/O请求参数

10.4 处理和运行IRP

10.5 案例学习:当非I/O方式成为唯一选择时

第11章 分层化的驱动程序模型

11.1 核心模式驱动程序

11.1.1 文件系统驱动程序

11.1.2 中级驱动程序

11.1.3 设备驱动程序

11.1.4 微驱动程序

11.2 中间级和设备驱动程序分层化(Layering)

11.3 文件系统驱动程序分层化

11.4 在堆栈顶部寻找驱动程序

11.5 了解驱动程序结构

11.6 分层处理I/O请求

11.6.1 处理IRP本身

11.6.2 将IRP传递给较低分层的驱动程序

11.6.3 创建传递到更低等级驱动程序的附加IRP

11.6.4 等级化驱动程序模型的优势

11.7 完成通知

11.7.1 在一个完成例程中驱动程序功能

11.8 在驱动程序之间的专门知识

11.9 过滤器驱动程序

11.9.1 过滤器驱动程序使用指导

11.10 快速I/O

11.11 案例学习:载入顺序的重要性

第12章 驱动程序结构

12.1 驱动程序入口点

12.2 理解驱动程序结构

12.2.1 载入和初始化

12.2.2 设备驱动程序的请求处理

12.2.3 中级驱动程序的请求处理

12.2.4 动态卸载

12.2.5 请求处理环境

第13章 驱动程序入口

13.1 决定设备配置

13.1.1 资源列表、描述符和部分描述符

13.1.2 查询系统配置数据

13.1.3 查询总统配置数据

13.1.4 查询注册表

I3.2 创建设备对象

13.2.1 设备扩展

13.2.2 设备名称

13.2.3 设备类型和特性

13.2.4 设备排他性

13.2.5 设备命名考虑

13.2.6 设备标号链接

13.3 获得硬件资源

13.4 转换总线地址

13.4.1 映射逻辑地址到核心虚拟地址空间

13.4.2 举例:转换总线地址

13.4.3 总线地址转换的精华

13.5 输出入口点

13.6 连接中断和注册DpcForIsr

13.6.1 转换中断等级和向量

13.6.2 将驱动程序ISR与中断相连

13.6.3 为DpcForIsr初始化DPC对象

13.7 获得一个适配器对象

13.8 执行设备初始化

13.9 其他DriverEntry操作

13.9.1 中级缓冲区

13.9.2 DMA设备的公共缓冲区

13.9.3 I/O计时器

13.9.4 中级驱动程序和过滤器驱动程序

13.10 动态驱动程序卸载

第14章 分派入口点

14.1 确认请求

14.2 完成请求

14.2.1 提升I/O请求线程优先级

14.2.2 I/O管理器如何完成请求

14.3 挂起和排队请求

14.3.1 系统排队

14.3.2 驱动程序排队

14.3.3 附加设备队列

14.4 请求处理

14.4.1 同步处理并完成

14.4.2 异步处理与结束

14.4.3 结合同步和异步方法

14.5 关闭通告

14.6 删除处理

14.6.1 系统排队和IRP删除

14.6.2 驱动程序排队和IRP删除

14.6.3 删除正在处理的请求

14.7 小结

第15章 中断服务例程和DPC

15.1 中断服务例程

15.1.1 ISR的内部过程

15.1.2 中断共享和ISR

15.2 DpcForIsr和CustomDpc

15.2.1 DpcForIsr的登录入口点

15.2.2 在DpcForIsr中的处理过程

15.3 ISR和DpcForIsr的设计

15.3.1 ISR和DPC

15.3.2 ISR对DPC例程的延迟

15.4 实例分析

第16章 程序化的I/O数据传送

16.1 处理程序化的数据传送

16.1.1 得到请求者缓冲区地址

16.1.2 得到请求者缓冲区长度

16.1.3 通过请求和控制传输操纵设备

16.1.4 在设备和请求者缓冲区之间传递数据

16.2 程序化的I/O驱动程序实例

16.2.1 分派例程和StartIo例程

16.2.2 中断服务例程

16.2.3 DPC例程

16.2.4 例中驱动程序的DPC与ISR之间的关系

16.3 程序化的I/O设备驱动程序设计中的一些问题

16.3.1 将设备内存映射到用户空间

16.3.2 轮询

16.3.3 同步驱动程序的实现

第17章 DMA数据传输

17.1 DMA数据传输处理

17.2 适配器对象

17.3 映射寄存器

17.4 DMA设备结构

17.4.1 基于数据包的DMA

17.4.2 公用缓存DMA

17.4.3 基于数据包的DMA和公用缓冲区DMA的比较

17.5 基于数据包的DMA传输

17.5.1 准备传输

17.5.2 对设备编程

17.5.3 结束传输

17.5.4 延续驱动程序执行

17.6 公用缓冲区DMA传输

17.6.1 分配公用缓冲区

17.6.7 执行传输

17.6.3 延续驱动程序的执行

17.7 基于数据包的DMA驱动程序例子

17.7.1 分派程序

17.7.2 准备传输

17.7.3 对设备编程

17.7.4 中断服务程序

17.7.5 结束传输并且延续程序的执行

17.8 DMA设备驱动程序的设计问题

17.8.1 对齐限制

17.8.2 系统DMA

第18章 驱动程序的生成和调试

18.1 建立驱动程序开发环境

18.1.1 以下将详细讨论上述步骤

18.1.2 建立系统

18.1.3 设置调试

18.2 生成驱动程序

18.3 驱动程序调试

18.3.1 核心调试器扩展

18.4 调试和测试的提示和技巧

18.4.1 在WinDbg中显示输出

18.4.2 在哪里生成你的项目

18.4.3 在你的测试系统上安装多种系统映相

18.4.4 提高串口的速度

18.4.5 用SysRq键中止测试系统

18.4.6 断定假设

18.4.7 ASSERT()只能工作在受限结构上

18.4.8 定义你自己的ASSERT()宏

18.4.9 在MP系统上测试

18.4.10 使用DDK提供的工具

18.4.11 用性能监视器检查你的驱动程序

18.4.12 打开池检查

18.4.13 保持最新

18.4.14 从世界获取帮助

18.5 蓝屏内幕

18.5.1 蓝屏格式

18.5.2 报告或解释蓝屏

18.6 崩溃堆文件

第19章 创建一个完全的驱动程序

19.1 驱动程序错误记录

19.1.1 定义错误信息

19.1.2 分配错误记录包

19.1.3 往事件日志中写包

19.1.4 激活信息编译器

19.1.5 将驱动程序注册为事件记录源

19.2 定义驱动程序版本资源

19.2.1 从Microsoft提供的模板定义.RC文件

19.2.2 创建你自己的资源定义文件

第20章 安装和启动驱动程序

20.1 驱动程序如何启动

20.1.1 驱动程序服务项

20.2 驱动程序特定的和设备特定的参数

20.3 驱动程序安装

20.3.1 文本设置

20.3.2 GUI设置

20.3.3 自定义设置

第三部分 备用的NT驱动程序结构

第21章 文件系统驱动程序

21.1 文件系统驱动程序特性

21.1.1 文件系统驱动程序在请求线程的环境中被调用

21.1.2 文件系统驱动程序同虚拟内存(VM)子系统紧密地集成在一起

21.1.3 文件系统驱动程序与I/O和对象管理器联系紧密

21.2 更多地了解关于开发文件系统驱动程序

第22章 视频微端口驱动程序

22.1 视频端口/微端口驱动程序

22.1.1 视频端口驱动程序

22.1.2 视频微端口驱动程序

22.2 显示驱动程序

22.2.1 设备显示接口(DDI)驱动程序

22.3 DMA(直接内存访问)和视频显示驱动程序

22.4 更深入地了解开发视频显示驱动程序

第23章 SCSI微端口驱动程序

23.1 SCSI微端口驱动程序特性

23.2 SCSI微端口驱动程序结构

23.2.1 初始化工作

23.2.2 请求的初始化

23.2.3 中断服务

23.3 更深入地了解关于开发SCSI微端口驱动程序

第24章 NDIS微端口驱动程序

24.1 标准的NDIS家族

24.2 Windows NT网络结构

24.3 NDIS驱动程序类型和NDIS库

24.4 NDIS LAN微端口驱动程序

24.4.1 初始化

24.4.2 传输处理

24.4.3 中断和DPC处理

24.4.4 传输终结

24.4.5 消息接收

24.4.6 串行化

24.5 更深入地了解如何开发NDIS驱动程序

第四部分 附录

附录A Windows NT状态代码/Win32错误代码

附录B 关于驱动程序编写者信息的资料来源

本书的网页

期刊和杂志

NT内幕杂志

Windows NT杂志

Dobb’s博士的期刊

Microsoft的知识基地

新闻组,邮件列表和一些最常遇到的问题

NTDEV邮件列表

NTFSD邮件列表

DDK-L邮件列表

关于Windows NT核心模式驱动程序最经常问到的问题

研讨会

OSR开放系统资源公司

David Solomon专家研讨会

附录C Windows 2000的一些变化

在Windows 2000上的NT 4.0设备驱动程序

驱动程序登录的变化

Windows 2000的驱动程序入口点

添加设备入口点

处理即插即用IRP

DMA实现上的变化

电源管理

IRP_MN_QUERY_POWER

IRP_MN_SET_POWER

IRP_MN_WAIT_WAKE