没有合适的资源?快使用搜索试试~ 我知道了~
首页WDM 驱动程序开发文档
WDM 驱动程序开发文档
需积分: 3 66 下载量 124 浏览量
更新于2023-03-03
评论
收藏 264KB PDF 举报
WDM(Windows Driver Mode)是MS 提供的98 和NT 5.0 下的通用的驱动程序模型。相比起以前的KDM 和VXD 来说,它的性能更高、系统之间移植更加方便。所以,随着系统的升级(指MS 的操作系统),WDM 已经逐步取代KDM 和VXD,成为MS 系统下驱动程序开发的主流。
资源详情
资源评论
资源推荐
WDM 驱动程序开发文档
WDM(Windows Driver Mode)是 MS 提供的 98 和 NT 5.0 下的通用的驱动程序模型。相
比起以前的 KDM 和 VXD 来说,它的性能更高、系统之间移植更加方便。所以,随着系统的
升级(指 MS 的操作系统),WDM 已经逐步取代 KDM 和 VXD,成为 MS 系统下驱动程序开
发的主流。(关于 Windows 下的驱动程序编写,查看参考文献 1)
第一部分 从操作系统看驱动程序
Windows NT 的系统结构决定了 NT 下访问设备的特殊性。NT 是建立在 Mach 和 Va x 思想
上的一种客户/服务器模型操作系统,由一个特权执行体以及一系列被称为保护子系统的非特
权服务器组成。整个操作系统被分为用户态模式和核心态模式。所谓特权,是指处理器的操
作方式,大多数的处理器都有一种甚至若干种特权方式。在特权方式方式下,所有机器指令
都可执行并且系统内存可存取。在非特权方式方式下,某些机器指令不能执行并且系统内存
不可存取。在 Windows NT 下,核心态就是指处于特权处理器方式下,而用户态总处于非特权
处理器方式。
核心态模式又被称为 NT 执行体,包括了系统服务和硬件描述层(HAL),它们运行于 CPU
的特权层 Ring0(在驱动程序内部,在不同部分还分为不同权限层)。系统服务包含了一个操作
系统的所有应有服务,文件系统,进程控制,内存管理,设备管理等等。NT 中除了微内核外,
另外还包含了一些独特的部分,如对象管理器,配置管理器,执行体支持,本地过程调用,
安全监视器,所有这些都建立在 HAL 之上。IO 管理器实现对设备的管理,包含了文件系统,
中间介质和设备驱动。通过 HAL,NT 可以防止内核和 NT 执行体的其它部分受硬件平台不同
的影响。另外 NT 还将网络管理器加入了核心态模式。用户态模式包括了一些保护子系统,如
OS/2 子系统,POSIX 子系统,安全子系统,当然还有最常用的 Win32 子系统,NT 都称之为
服务器。它们运行于 CPU 的用户层 Ring3,建立在服务器上的各类应用程序被称为客户。
从上图中,我们可以把和驱动程序相关的部分提取出来,就得到了下面简化的系统结构
:
图二:WIN2000 的系统结构
从这里我们可以看出驱动程序要处理的就是从 IO Manager 发送过来的 IRP(IO Request
Packer),根据不同的 IRQ 作出不同的相应(或者是通过调用系统提供的函数来读写端口),
比方说,我们在最上层调用函数::ReadFile,系统就会发送一个 IRP_MJ_READ 给驱动程序。从
这一点我们可以看出:驱动程序本质上可以看作是工作在系统底层的一个
DLL。
然后我们将要描述一个操作的典型过程。
I/O 管理器的主要工作是接收 I/O 请求(通常来自于用户模式的应用程序),创建 I/O 请
求包,将 IRP 传递给合适的 NT 驱动。并且跟踪它们直到完成。并且为每个 I/O 操作的原始请
求者返回状态。I/O 管理器使用 IRP 和 NT 驱动通讯,并且允许 NT 驱动互相之间通讯。要注
意的是一些 IRP 将传递给不止一个 NT 驱动。例如,在磁盘中打开文件这个请求将将手先传到
文件系统驱动,经过中间介质的镜像驱动最终传到物理磁盘驱动。因此每一个 IRP 有一个固
定的部分,还有一个或多个 I/O 的位置栈。在固定的部分,I/O 管理器保持原始请求信息,例
如调用者参数,关于哪一个文件打开的设备对象地址,等等。另外在固定的部分还包含 I/O 状
态块,其中包含了请求操作的驱动信息。在高级驱动的 I/O 本地栈中,I/O 管理器设置特殊的
参数。
I/O 管理器提供异步 I/O,这样 IRP 的请求者能够继续执行,而不是等待 IRP 完成。NT
驱动没有必要按照它们传递给 I/O 管理器的顺序处理 I/O 请求。I/O 管理器或高级驱动在接收
时可以重新排列 I/O 请求或将大数据的传输请求分离为小的传输请求。于是我们就得到了下面
的驱动程序处理 IRQ 的基本框架:
” 图三:IRP 处理的典型流程
NT 保护子系统,例如 WIN32 子系统,通过 I/O 系统服务传递 I/O 请求到相应的核心态子
系统。如上图所示。通过 NT 的 I/O 管理器提供的文件对象,子系统可以存取 NT 驱动设备或
储存设备。在 NT 系统中,所有驱动对象以符号链接表示。
1. 子系统调用 NT 的 IO 系统服务打开命名文件。
2. NT 的 IO 管理器调用对象管理器,查询命名文件,并且帮助解决文件对象的符号连接。
同时调用安全参照监视器,检查子系统是否具备打开文件句柄的正确权限。
3. 如果 NT 文件系统不认识文件对象 IO 管理器挂起请求。调用多个文件系统直到识别出
文件对象才继续请求。
4. IO 管理器负责为打开的请求分配内存和初始化 IRP。对于 NT 驱动,打开请求等同于
创建请求。
5. IO 管理器调用文件系统驱动,将 IRP 传递给它们。文件系统存取它们的 IRP 中本地
IO 栈,决定必须进行哪一种操作。检查参数,确定请求文件是否在缓存中。如果不是,
设置下一个 IRP 中驱动的 IO 栈。
6. 无论是驱动处理 IRP 还是完成 IO 请求操作。都调用 IO 管理器和其它 NT 元素提供的
核心态例程。
7. 驱动设置返回给 IO 管理器的 IRP 中的 IO 状态块表示请求操作是成功还是失败。
8. IO 管理器通过获取 IRP 中的 IO 状态,将信息同过保护子系统返回给原始调用者。
9. IO 管理器释放已完成的 IRP。
如果打开操作成功,IO 管理器返回文件句柄给子系统。反之返回错误状态。
注意在设计 NT 驱动时必须牢记以下几点:
NT 驱动是分层的,不只一个的 NT 驱动可以处理单一的 IRP.NT 驱动使用 IRP 中的 IO
状态栈进行 IO 操作,处理请求成功还是失败的通讯.而 IO 管理器将这一结果传递给用户态请
求者。NT 驱动不需要也没必要设计成提供支持特殊应用.保护子系统或其特殊的子系统,用户
态驱动已经提供了这些支持.但有一个例外:建立在专门应用设备上的 MS-DOS 应用程序可以
请求 NT 驱动控制这一设备和相近的 WIN32 用户模式虚拟设备驱动.更多有关 VDD 的信息请
参见 DDK 中的 Virtual DOS Drivers 文档.
而对于一般类型的 IRQ,我们可以得到更加详细的流程如下图所示。在这里我们同时也
详细表示了低级设备 IRP 的本地 IO 栈的细节.例如物理磁盘驱动
图四:IRQ 的创建和处理过程
1. IO 管理器使用子系统读写请求分配的 IRP 调用文件系统驱动(FSD)。FSD 存取它的 IO
位置栈。FSD 存取 IRP 中 IO 位置栈决定哪一个操作将被调用。
2. FSD 可以通过多次调用 IO 支持例程(IoAllocateIrp)分配 IRP,将原始请求分成更小的
请求。这样 FSD 可以得到已被全添成零的低级驱动 IO 位置栈,FSD 可以根据判定重
新使用原始 IRP,甚至如图所示,通过设置在原始 IRP 中设置下一个低级驱动的 IO
位置栈,分配附加的 IRP,并传递给低级驱动。
3. 对于每一个已分配的驱动的 IRP,FSD 调用一个 IO 支持例程注册 FSD 提供的完成例
程,用来判定低级驱动是否满意请求,并当低级驱动完成时释放每一个已分配的驱动
IRP。接下来 FSD 调用 IO 支持循环存取在 IRP 中的下一个低级驱动 IO 位置栈。设置
下一个低级设备的请求。当调用 IRP 时,物理设备驱动检查 IO 位置栈决定对目标设
备进行何种操作(由 IRP_MJ_XXX 函数代码表示),
4. IO 管理器判定设备驱动是否正在忙于处理目标设备的另一个 IRP。如果是这样就排入
队列并返回。否则就开始调用驱动支持例程处理设备的 IO 操作。
5. 当设备被中断时。驱动的 ISR 停止设备并保存操作所必须的上下文,然后 ISR 调用 IO
支持循环将驱动 DPC 循环排队。完成优先级高的低级硬件请求操作。
6. 当驱动的 DPC 获得控制。将使用保存的上下文完成 IO 操作(传递 ISR 的调用到
IoRequestDpc)。DPC 调用一个支持循环将下一个 IRP 出队,并将其传递给驱动,开
始设备的 IO 操作。DPC 然后设置已完成操作的 IRP 的 IO 状态块通过
IoCompleteRequest 将其返回给 IO 管理器。
7. IO 管理器将低级驱动 IRP 中的 IO 位置栈清零并调用文件系统注册 FSD 分配 IRP 的完
成的循环。完成循环检查 IO 状态块决定是重试请求还是更新原始请求保持的通用状
态,并释放驱动分配的 IRP。当完成 IRP 后,IO 管理器返回 NT 状态给 IO 操作请求
者。
通过上面的描述,大家应该对驱动程序的基本操作过程和基本结构有了大致的了解。
剩余20页未读,继续阅读
huyin007
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2023年中国辣条食品行业创新及消费需求洞察报告.pptx
- 2023年半导体行业20强品牌.pptx
- 2023年全球电力行业评论.pptx
- 2023年全球网络安全现状-劳动力资源和网络运营的全球发展新态势.pptx
- 毕业设计-基于单片机的液体密度检测系统设计.doc
- 家用清扫机器人设计.doc
- 基于VB+数据库SQL的教师信息管理系统设计与实现 计算机专业设计范文模板参考资料.pdf
- 官塘驿林场林防火(资源监管)“空天地人”四位一体监测系统方案.doc
- 基于专利语义表征的技术预见方法及其应用.docx
- 浅谈电子商务的现状及发展趋势学习总结.doc
- 基于单片机的智能仓库温湿度控制系统 (2).pdf
- 基于SSM框架知识产权管理系统 (2).pdf
- 9年终工作总结新年计划PPT模板.pptx
- Hytera海能达CH04L01 说明书.pdf
- 数据中心运维操作标准及流程.pdf
- 报告模板 -成本分析与报告培训之三.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0