- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Programming The Microsoft
Windows Driver Model(WDM)
――Walter Oney
第一章:导言 2
操作系统概述 2
Windows 2000驱动程序 5
内核模式驱动程序的属性 5
WDM驱动程序模型 7
第二章:WDM驱动程序的基本结构 9
设备和驱动程序的层次结构 9
DriverEntry例程 20
AddDevice例程 22
Windows 98兼容问题 33
第三章:基本编程技术 34
内核模式编程环境 34
错误处理 35
内存管理 45
字符串操作 56
其它编程技术 59
第四章:同步 68
一个原始的同步问题 68
中断请求级 69
自旋锁 72
内核同步对象 73
其它内核模式同步要素 85
第五章:I/O请求包 90
数据结构 90
IRP处理的“标准模型” 93
完成I/O请求 98
向下级传递请求 103
取消I/O请求 105
管理自己的IRP 111
松散的结尾 114
第六章:即插即用 116
IRP_MJ_PNP派遣函数 118
启动和停止设备 119
管理PnP状态转换 125
其它配置功能 140
第七章:读写数据 157
配置设备 157
寻址数据缓冲区 159
端口与寄存器 162
响应中断 165
直接内存存取(DMA) 175
第八章:电源管理 191
WDM电源管理模型 191
管理电源状态转换 194
其它电源管理细节 214
第九章:专门问题 219
过滤器驱动程序 219
登记错误 223
I/O控制操作 227
系统线程 240
工作项 244
看门狗定时器 245
Windows 98兼容问题 248
第十章:Windows管理诊断 249
WMI概念 249
WDM驱动程序与WMI 250
用户模式程序与WMI 262
Windows 98兼容问题 269
第十一章:USB总线 269
编程架构 270
使用总线驱动程序 279
第十二章:安装驱动程序 306
INF文件 306
定义设备类 316
运行应用程序 320
Windows 98兼容问题 324
附录A:Windows 98不兼容处理 325
为内核模式例程定义桩 325
确定操作系统版本 329
附录B:术语表 329
第一章:导言操作系统概述
WDM模型为存在于Windows 98和Windows 2000操作系统中的设备驱动程序提供了一个参考框架。尽管对于最终用户来说这两个操作系统非常相似,但它们的内部工作却有很大不同。在这一节,我将对这两个操作系统做一个简要描述Windows 2000概述
图1-1是以我的视点所看到的Windows 2000操作系统,该图着重了驱动程序开发者所关心的特征。软件要么执行在用户模式中,要么执行在内核模式中。当用户模式程序需要读取设备数据时,它就调用Win32 API函数,如ReadFile。Win32子系统模块(如KERNEL32.DLL)通过调用平台相关的系统服务接口实现该API,而平台相关的系统服务将调用内核模式支持例程。在ReadFile调用中,调用首先到达系统DLL(NTDLL.DLL)中的一个入口点,NtReadFile函数。然后这个用户模式的NtReadFile函数接着调用系统服务接口,最后由系统服务接口调用内核模式中的服务例程,该例程同样名为NtReadFile。
图1-1. Windows 2000系统结构
我们经常说NtReadFile是I/O管理器的一部分。“I/O管理器(I/O Manager)”这个术语多少有些误导,系统中并不存在名为“I/O管理器”的单独执行模块。但当我们讨论围绕在驱动程序周围的操作系统服务“云”时,我们需要使用一个名字来代表,而“I/O管理器”就是我们通常使用的名字。系统中还有许多与NtReadFile相似的服务例程,它们同样运行在内核模式中,为应用程序请求提供服务,并以某种方式与设备交互。它们首先检查传递给它们的参数以保护系统安全或防止用户模式程序非法存取数据,然后创建一个称为“I/O请求包(IRP)”的数据结构,并把这个数据结构送到某个驱动程序的入口点。在刚才的ReadFile调用中,NtReadFile将创建一个主功能代码为IRP_MJ_READ(DDK头文件中的一个常量)的IRP。实际的处理细节可能会有不同,但对于NtReadFile例程,可能的结果是,用户模式调用者得到一个返回值,表明该IRP代表的操作还没有完成。用户模式程序也许会继续其它工作然后等待操作完成,或者立即进入等待状态。不论哪种方式,设备驱动程序对该IRP的处理都与应用程序无关。执行IRP的设备驱动程序最后可能会访问硬件。对于PIO方式的设备,一个IRP_MJ_READ操作将导致直接读取设备的端口
文档评论(0)