1.2 研究目的及目标
目的及目标:对文件系统以及文件系统过滤驱动的基本概念,开发工具,开发方法进行深入的认识和理解。了解了文件系统过滤驱动在当今信息领域的应用,学会使用开发文件过滤驱动的工具,掌握开发文件系统过滤驱动的基本方法。学会Windows编程,熟悉IRP结构。并着重探究一个有效地文件系统过滤驱动程序——USB管理系统。
2.文件过滤驱动
2.1 什么是过滤驱动
文件过滤驱动是一种内核模式驱动,它依靠拦截发往存在的内核模式驱动的请求来提供新的功能。过滤驱动可以截获用户的写请求,在数据传输到存储介质之前对数据进行加密,从而实现了数据动态加密,如果是用户的读操作,则截获用户的读请求,并且在完成例程中得到读取的数据,并进行解密,这就实现了数据的动态解密。除了对读取操作的动态加解密,文件过滤驱动还可以用于病毒的实时监测,数据在写入读取的时候,数据都会被过滤驱动拦截,一旦发现含有病毒木马特征,则阻止数据的传播。文件过滤驱动可以对文件和文件夹进行保护,也可以拓展到对整个逻辑卷进行保护。文件过滤驱动还可以用作数据存储管理。它可以将不常访问的数据保存到廉价速度慢的二级存储;一旦有应用程序访问二级存储中的数据,那么过滤驱动将该数据自动恢复到速度快的存储中,方便应用程序访问。
2.2 文件过滤驱动的原理
2.2.1 I/O管理器
I/O管理器采用IRP数据包作为通信的基本请求单位,在分层的内核驱动程序,每个层次中的驱动程序接受一个IRP请求包,然后依次向下传递,最低层的驱动程序最接近硬件本身。采用了这种分层的结构,更加方便了开发者开发第三方功能。windows是一个定义良好的分层结构阵。I/O管理器管理所有操作设备的I/O通过硬件设备驱动程序、中间驱动程序、过滤驱动程序、文件系统驱动程序等内核软件的互相协作完成I/O操作。
2.2.2 文件过滤驱动原理
图1. 文件系统工作原理
从图1可知,硬件设备驱动程序处于层次中的最低层,和硬件抽象层进行交互,直接对硬件进行操作处理。中间驱动程序接受文件系统驱动程序的IRP,处理或下发给设备驱动程序。文件系统驱动程序提供关于文件各种操作的内核服务,比如文件的打开,创建,读写等,并且管理关于文件的各种数据结构,比如BIOS参数块等等。过滤驱动程序过滤上层的IRP操作,主要过滤需要关心的数据或者功能。用户对文件进行读写,首先将请求传给I/O管理器,由I/O管理器解析文件路径,将文件请求发送给符合该功能的文件系统驱动程序,I/O管理器会从内部的注册列表中遍历寻找每一个文件系统驱动,所以某个文件系统驱动如果想拥有控制操作文件的权利,该文件系统必须先向I/O管理注册,通知I/O管理器。文件系统除了和I/O管理器交互,还会和其他重要的内核组件进行交互。如果想对文件系统增加一些其他的功能,修改已有的文件系统驱动程序可行性不大,且微软并不支持这样的操作。但是微软的Windows支持分层的结构,所以就为文件系统增加附加功能提供了方便,将过滤驱动附加在文件系统驱动之上完成特定的功能,比如提供文件的动态加解密。
在文件过滤驱动附加到文件系统驱动之上后,文件过滤驱动可以在I/O管理器发送IRP给文件系统驱动程序之前截获该IRP进行定制。文件系统驱动程序有且只有一个控制设备对象(CDO),该对象主要用来接收请求控制文件系统的命令,比如查询一个卷是否已经挂载,当对卷上文件访问时,访问请求传递给了I/O管理器,I/O管理器检查改卷是否已经挂载,如果没有挂载,则构造挂载IRP请求并传递给文件系统驱动程序的控制设备对象,请求挂载,随之文件过滤驱动程序处理该挂载操作。如果希望对于此类的命令进行过滤,那么文件过滤驱动必须将自己的设备控制对象附加到文件系统驱动的设备对象之上,这样当I/O管理器在发送IRP给文件系统驱动程序的设备控制对象之前会先检查是否有过滤驱动的设备控制对象存在,如果过滤驱动之上还有其他过滤驱动,即多层过滤驱动,则I/O管理器根据从上往下的顺序依次向下传递即,这样也可以确保每个过滤驱动均有机会处理该IRP请求。当过滤驱动处理IRP结束后,再将IRP传递给文件系统的设备控制对象,如果不想传递直接完成也可以完成某种特定的功能。文件系统过滤驱动创建控制设备对象 (CDO)和过滤设备对象(FIDO)。CDO 唯一的表示一个驱动程序,对操作系统而言,CDO就是创建其对象的驱动本身。FIDO绑定每个加载卷的设备对象(VDO)完成实际的过滤工作。针对每个卷的读写操作来拦截,具体的说就是I/O管理器把发送到卷设备对象的IRP先发送到绑定在其之上的FIDO。 对文件过滤驱动的移动存储控制理论的研究(2):http://www.751com.cn/wuli/lunwen_8323.html