序言 | 第1-10页 |
第一部分 驱动程序的基本开发技术 | 第10-53页 |
第一章 操作系统概述 | 第11-15页 |
1.1 Windows NT/2000的体系结构 | 第11页 |
1.2 用户模式和内核模式 | 第11-12页 |
1.3 硬件抽象层(HAL) | 第12-13页 |
1.4 内核 | 第13页 |
1.5 Executive | 第13-14页 |
1.6 保护子系统 | 第14-15页 |
第二章 驱动程序的基本结构 | 第15-23页 |
2.1 Windows 2000驱动程序的种类 | 第15-16页 |
2.2 驱动程序中的对象 | 第16-19页 |
2.2 WDM驱动程序的层次结构 | 第19-23页 |
2.2.1 设备对象如何相互连接 | 第20-21页 |
2.2.2 驱动程序的加载顺序 | 第21-23页 |
第三章 驱动程序的例程 | 第23-31页 |
3.1 驱动程序的例程 | 第23页 |
3.2 驱动程序的入口 | 第23-26页 |
3.3 Unload例程 | 第26-27页 |
3.4 Dispatch例程 | 第27-31页 |
3.4.1 IRP功能码 | 第27-28页 |
3.4.2 扩展的派发接口 | 第28页 |
3.4.3 Dispatch例程的具体内容 | 第28-31页 |
第四章 I/O请求包 | 第31-42页 |
4.1 I/O请求包的结构 | 第31-34页 |
4.2 I/O栈 | 第34-36页 |
4.3 如何处理IRP | 第36-42页 |
4.3.1 创建一个IRP | 第37页 |
4.3.2 发送IRP到Dispatch例程 | 第37-38页 |
4.3.3 Dispatch例程如何处理IRP | 第38-39页 |
4.3.4 Startlo例程如何处理IRP | 第39-40页 |
4.3.5 中断服务例程如何处理IRP | 第40-41页 |
4.3.6 推迟过程调用(DPC)如何处理IRP | 第41-42页 |
第五章 中断优先级与同步 | 第42-49页 |
5.1 中断请求级(IRQL) | 第42-44页 |
5.2 IRQL和线程优先级比较 | 第44-45页 |
5.3 IRQL和分页 | 第45页 |
5.4 隐含控制IRQL | 第45-46页 |
5.5 自旋锁 | 第46-48页 |
5.5.1 什么是自旋锁 | 第46-47页 |
5.5.2 如何使用自旋锁 | 第47-48页 |
5.6 内核同步对象 | 第48-49页 |
第六章 即插即用 | 第49-53页 |
6.1 IRP_MJ_PNP回调例程 | 第49-51页 |
6.1.1 启动和停止设备 | 第51页 |
6.2 几种常用的PNP辅功能码 | 第51-53页 |
6.2.1 IRP_MN_START_DEVICE | 第51页 |
6.2.2 IRP_MN_STOP_DEVICE | 第51-52页 |
6.2.3 IRP_MN_REMOVE_DEVICE | 第52-53页 |
第二部分 通用驱动程序包的实现 | 第53-86页 |
第七章 高精度软定时器 | 第54-59页 |
7.1 内核Timer对象 | 第54-56页 |
7.1.1 什么是内核Timer对象 | 第54-55页 |
7.1.2 内核Timer对象的用法 | 第55页 |
7.1.2.1 周期timer对象 | 第55页 |
7.1.2.2 同DPC一起使用的“通知Timer”对象 | 第55-56页 |
7.1.2.3 CustomTimerDpc例程 | 第56页 |
7.2 通知用户模式应用程序 | 第56-57页 |
7.3 应用程序如何接收超时事件 | 第57页 |
7.4 小节 | 第57-59页 |
第八章 通用端口驱动程序 | 第59-86页 |
8.1 基本设计思想 | 第59页 |
8.2 缓冲策略 | 第59-65页 |
8.3 端口和寄存器访问 | 第65-67页 |
8.3.1 端口资源 | 第66-67页 |
8.3.2 内存资源 | 第67页 |
8.4 Dispatch例程 | 第67-70页 |
8.5 GdStartlo例程 | 第70-72页 |
8.6 中断处理 | 第72-77页 |
8.6.1 连接和处理中断 | 第72-73页 |
8.6.2 中断处理中的一些限制 | 第73-74页 |
8.6.3 选择一个合适的Context参数 | 第74页 |
8.6.4 与中断同步 | 第74-75页 |
8.6.5 推迟过程调用(DPC) | 第75-77页 |
8.7 输出的数据流 | 第77-82页 |
8.7.1 如何实现数据流 | 第77-79页 |
8.7.2 在驱动程序和应用程序间共享缓冲区 | 第79-82页 |
8.8 内部指令集 | 第82-85页 |
8.9 小结 | 第85-86页 |
第九章 通用DMA驱动程序 | 第86-99页 |
9.1 直接内存访问(DMA) | 第86-89页 |
9.1.1 传输策略 | 第87-88页 |
9.1.2 Adapter对象的控制流程 | 第88-89页 |
9.2 DMA如何工作 | 第89页 |
9.2.1 使用Adapter对象 | 第89-91页 |
9.2.2 内存描述符表(MDL) | 第89-90页 |
9.2.3 DMA驱动程序分类 | 第90-91页 |
9.3 通用DMA驱动程序 | 第91-98页 |
9.3.1 开始DMA传输 | 第91-94页 |
9.3.2 设备描述(deviceDescription) | 第94页 |
9.3.3 AdapterControl回调例程 | 第94-96页 |
9.3.4 DMA传输中的中断服务例程 | 第96-98页 |
9.3.5 与硬件相关的DMA操作 | 第98页 |
9.4 小结 | 第98-99页 |
第十章 驱动程序的编译、安装、调试和包装 | 第99-108页 |
10.1 驱动程序的编译 | 第99-100页 |
10.1.1 Build | 第99页 |
10.l.2 编译驱动程序的过程 | 第99-100页 |
10.1.3 Build生成的日志文件 | 第100页 |
10.2 驱动程序的安装 | 第100-103页 |
10.2.1 手工安装驱动程序 | 第100-101页 |
10.2.2 驱动程序的装入次序 | 第101-102页 |
10.2.3 驱动程序的自动安装程序 | 第102-103页 |
10.3 驱动程序的调试 | 第103-104页 |
10.4 包装驱动程序 | 第104-106页 |
10.4.1 DLL概述 | 第104页 |
10.4.2 在VC中建立DLL | 第104-105页 |
10.4.3 DLL的初始化 | 第105-106页 |
10.4.4 链接DLL和应用程序 | 第106页 |
10.4.5 在VB中使用DLL | 第106-108页 |
总结 | 第108-109页 |
致谢 | 第109-110页 |
参考文献 | 第110-112页 |