windows文件系统的过滤器驱动程序设计

windows文件系统的过滤器驱动程序设计

ID:19837468

大小:39.50 KB

页数:6页

时间:2018-10-06

windows文件系统的过滤器驱动程序设计_第1页
windows文件系统的过滤器驱动程序设计_第2页
windows文件系统的过滤器驱动程序设计_第3页
windows文件系统的过滤器驱动程序设计_第4页
windows文件系统的过滤器驱动程序设计_第5页
资源描述:

《windows文件系统的过滤器驱动程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Windows文件系统的过滤器驱动程序设计西安电子科技大学李新摘要:某些应用程序对文件系统的性能有较高要求。例如媒体播放器需要满足最小数据传输率才能保证视觉上的流畅。由于Windows文件系统本身没有提供这样的保证,需要编写过滤器驱动程序添加这项功能。本文首先介绍系统驱动体系和文件系统工作机制,然后分析文件系统过滤器驱动程序的功能特点,最后介绍一种满足此类应用程序传输带宽的总体解决方案(来源于文献1)。关键词:文件系统过滤器驱动程序设备对象堆栈一.基础知识1.系统组件WindowsNT操作系统含有许多功能相互独立的内核模式组件。如内核I/O管理器、硬件抽

2、象层、存储管理器、配置管理器、对象管理器、运行支持和过程结构等组件。Windows2000在此基础上增加了即插即用管理器和电源管理器。两种系统分别采用不同的驱动模型。本文整体上以Windows2000的文档为主。不过文件系统具有特殊性(非WDM),在两个系统中的运行机制基本相似。在这些内核组件中,I/O管理器最为关键,它由文件系统、中间层驱动程序和最低层设备驱动程序三部分组成,对所有的核心态驱动程序提供统一的通信接口IRP(I/O请求包方式)。应用程序的I/O操作都是通过这种方式调用I/O管理器的服务完成的。主要服务有:配置管理、内存管理、对象管理、安全

3、监视等等。2.驱动程序驱动程序实质是能被操作系统加载调用,为系统设备实现相应功能的内核模式的动态链接库。形式上可以看作是一个包含许多例程的容器。当第一次安装时,由I/O管理器调用驱动程序入口函数DriverEntry,驱动程序在此进行自身初始化,设置其它例程的进入点,使操作系统接下来可以调用这些服务例程。驱动程序加载时机与它的启动类型和启动组设置有关。启动类型有五种,通常文件系统及其过滤器驱动程序属于SERVICE_BOOT_START或SERVICE_DEMAND_START。驱动体系是分层的。在用户程序和硬件设备之间可以存在多个驱动程序,这些驱动程序

4、上下链接形成驱动程序堆栈(实际数据结构是由这些驱动程序创建的设备对象所构成的设备堆栈),共同为此硬件设备服务。I/O管理器根据请求向设备驱动程序创建并发送的IRP,会沿设备对象栈依次下传,直到某个驱动程序完成此IRP请求的操作。物理设备堆栈在物理设备枚举过程中形成。当系统启动后,PNP管理器从系统根总线开始检测PNP物理设备,为之创建物理设备对象(PDO),然后根据注册表加载它的驱动程序,创建其功能设备对象(FDO);然后这些设备的驱动程序再检测连接在它上面的PnP硬件,同样为各硬件创建PDO,加载其驱动程序,创建FDO。重复直到枚举完毕。每个物理设备的

5、PDO和FDO(如果该设备具有过滤程序,还将有FiDO)形成一个堆栈结构,称设备堆栈。枚举得到的设备构成物理设备树。节点主要就是设备堆栈。文件系统不是物理设备,其堆栈结构比较特殊,也不作为物理设备树的节点,但构成的原理及其运行机制是相似的。过滤器驱动程序是一种可选择的特殊驱动程序,可以加载在其它驱动程序之上,用于修改或增加原驱动程序的功能,而不必修改原驱动程序和使用该驱动的应用程序。例如,只需在过滤驱动程序中添加处理例程,把数据写到两个不同的物理磁盘,保证数据的冗余保存,增加磁盘访问的容错能力。使用IoAttachDeviceByPointer(或IoA

6、ttachDeviceToDeviceStack.)把一个过滤设备对象FiDO链接到目标设备对象FDO上。步骤:⑴获取目标设备对象的指针;⑵创建过滤设备对象;⑶保证此过滤驱动程序能够处理原目标设备接收的所有IRP。即为所有能接收的IRP设置派发例程入口点,并保证透明性;⑷调用IoAttachDeviceByPointer创建链接,把FiDO填入设备堆栈,使之紧紧位于目标设备对象FDO之上;当上述操作完成后,I/O管理器就把所有发往目标对象的IRP重定向发给该过滤设备对象。这样过滤程序就可以在目标设备驱动程序之前对IRP进行检查、修改、完成等操作。驱动程序

7、通过I/Ostacklocation中的主功能码MajorFunctionCode和次功能码获取任务信息。除标准功能码外,还可进行自定义,然后在用户程序中使用DeviceIoControl函数通知I/O管理器创建具有自定义功能码的IRP,由此可以完成一些特殊操作或实现驱动程序与应用程序之间的通信。举例说明IRP的派发过程及内核I/O管理器的功能:当应用程序请求打开某个文件,会有以下过程:1)保护子系统调用I/O管理器提供的服务来打开一个命名文件;2)I/O管理器调用对象管理服务查出所要操作的文件的符号连接名(SymbolicLink),然后调用安全监视服

8、务判断该用户保护子系统是否有访问此文件的权限;3)I/O管理器对文件进行定位。如

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。