1 文件系统过滤驱动工作原理
Windows NT内核操作系统的驱动模型采用分层结构,如图1所示。图中左边是一个设备对象栈,设备对象是操作系统为帮助软件管理硬件而创建的数据结构。每个硬件至少包含一个物理设备对象(PDO)和功能设备对象(FDO),它们中间会存在一些过滤设备对象(FiDO)。驱动程序对象包含了一组处理I/O请求的例程。分层结构使I/O的请求过程更加清晰明,影响到设备的每个操作使用I/O请求包(IRP,I/O Request Packag),每个I/O请求均由I/O管理器发出,并且依次从相应设备栈的顶端向下传递。每一层对应的驱动程序对象都可以调用相应的例程来处理IRP包。
磁盘文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构,它负责为用户建立、存入、读出、修改、转储文件,控制文件的存取与撤销。Windows系统中,在逻辑卷上无论使用什么格式的文件系统,都要实际创建文件系统元数据结构。文件系统驱动随后使用这个结构来提供诸如为用户数据存储分配空间的服务。逻辑卷必须被挂载上系统以后才能被用户访问。当逻辑卷被挂载后,文件系统驱动使用、修改存储在卷上的元数据并且根据这个元数据建立内存数据结构来管理这个卷。磁盘文件系统响应I/O请求的控制流程如图4-1所示。I/O请求由应用程序发出,经过WIN32子系统后送给I/O管理器,I/O管理器根据应用层的需要向文件系统发出I/O请求包,即IRP包。文件系统驱动程序对象收到IRP包后首先判断是否为Fast I/O请求,如果是,则交给Fast Dispatch例程处理,数据从缓存中得到并送给I/O管理器;如果不是,则由Dispatch例程来处理IRP包,数据会由磁盘驱动程序从磁盘分区中得到,然后也被送到I/O管理器。数据经过WIN32子系统的处理最终返回给应用程序。
述是不存在过滤驱动的文件系统控制流程。如果存在过滤驱动加载到文件系统之上时,控制流程会发生变化,如图2中虚线框所示,I/O管理器发出的IRP包都会先经过过滤驱动的处理再发送给文件系统驱动,而请求得到的数据也需要先经过过滤驱动的处理再返回给应用程序。因此,可以在过滤驱动中使用自定义的例程对数据进行处理,实现加解密的操作。
2 文件系统过滤驱动的作用
(1)用于防病毒引擎。在系统读写文件的时候,捕获读写的数据内容,然后检测其中是否含有病毒代码。
(2)用于文件系统的透明附加功能。比如希望在文件写过程中对数据进行加密,数据个性化等过程,针对特殊的过程进行特殊处理,增加文件系统效率等。
(3)一些安全软件使用文件过滤进行数据读写的控制,作为防信息泄露软件的基础
(4)一些数据安全厂家用来进行数据备份与灾难恢复。