Windows文件系统过滤驱动程序介绍
文件系统过滤驱动程序拦截针对某个文件系统或另一个文件系统过滤驱动程序的请求。通过在请求到达预期目标之前拦截请求,过滤器驱动程序可以扩展或替换由请求的原始目标提供的功能。过滤器驱动程序概念是WindowsI/O子系统最强大的体系结构特性之一。过滤器可以通过简单地将自己附加到现有设备上来为该设备的功能增加价值。当然,过滤设备不需要更改底层设备的驱动程序。
在Windows系统中,最常见也是最强大的一个地方是在文件系统上插入过滤器。文件系统过滤器在I/O操作到达文件系统之前拦截I/O操作(来自应用程序和系统本身)。这使它们能够监视、跟踪、管理、操作,甚至在文件系统看到I/O操作之前接受或拒绝它们。大多数人熟悉的文件系统过滤器类型可能是防病毒过滤器。这种类型的过滤器通常拦截文件打开请求,并在过滤器(或者更可能是在用户模式下运行的相关服务)扫描正在打开的文件以查找病毒时将其挂起。如果发现任何病毒,则可以取消打开的请求。如果未发现病毒,则允许打开的请求正常完成。
文件系统过滤器通常用于从刚才描述的防病毒和恶意软件扫描,到软件许可证跟踪和管理,到审计和更改文件跟踪,再到访问透明数据加密和解密。文件系统过滤器还可以用于其他不太明显的目的。例如,由于文件系统过滤器可以查看哪些文件被创建和写入,因此它们通常在备份产品和分层存储子系统中发挥关键作用。由于文件系统过滤器能够成为应用程序看到的文件系统“名称空间”的第一个解释器,因此它们还可以执行强大的文件重定向操作,例如使远程文件(例如存储在云中的某个地方的文件)看起来是本地的。
自从在WindowsXPSP2中引入以来,文件系统迷你过滤器模型已经成为实现文件系统过滤器的首选机制。这是有充分理由的,因为minfilter模型为文件系统过滤器驱动程序开发提供了一个优秀的组织和支持框架。由于GitHub上有相当好的文档和一组重要的示例,许多开发人员认为编写文件系统minfilter完全在他们的能力范围内。他们是对的,只要他们在一定的范围内。
标准迷你过滤器驱动程序
最常见的文件系统类型是minfilter,它监视并可能跟踪或记录在文件系统级别执行的各种操作。某些迷你过滤器(如防病毒扫描程序)甚至可能批准或不批准某些操作。但是,这些筛选器不参与更改它们筛选的文件中数据的视图或大小。我们称这样的过滤器为标准迷你过滤器,因为它们代表了存在的绝大多数文件系统迷你过滤器。
隔离迷你过滤器驱动程序
隔离迷你过滤器驱动程序是一个Windows文件系统迷你过滤器驱动程序,它将文件数据的视图与同一文件的实际底层数据分开。隔离迷你过滤器的典型示例是访问透明加密/解密过滤器。隔离迷你过滤器使用“相同堆栈”概念,并通过为每个视图提供唯一的缓存部分来提供不同的视图。透明的加密隔离过滤器驱动程序可以创建访问数据的两个视图,一个是从本地存储加密的,因此您的数据始终在本地磁盘中加密,另一个是解密给授权用户,对于每个打开的文件,过滤器驱动程序将创建一个唯一的内存缓存,因此如果用户或进程具有不同的权限,则不会看到相同的数据视图。当进程或用户被授权访问加密文件时,过滤器驱动程序将在读取请求期间解密内存中的数据,因此被授权的进程可以获得纯文本,或者将获得加密文本。当加密过滤器驱动程序关闭时,加密文件无法访问,当应用程序打开加密文件时,它将获得密文,因此没有启用加密过滤器驱动程序,任何人都无法读取加密文件。
隔离过滤器将文件数据的视图与文件系统存储的实际底层数据分开(或“隔离”)。编写这种类型的Minifilter通常与编写标准的Windows文件系统一样复杂,因为它涉及Minifilter、Windows缓存管理器和Windows内存管理器之间的直接和密切的交互。事实上,一些有经验的开发者认为Isolationminfilter甚至比文件系统开发更困难,因为当你在编写Isolationminfilter时,你必须有效地将Windows文件系统的实现“适配”到FilterManager提供的API中。因此,除了标准迷你过滤器的开发人员面临的挑战之外,隔离迷你过滤器的开发人员还要处理许多明显更复杂的问题。
为了实现文件数据与实际底层数据的分离视图,我们需要两种类型的文件对象,第一个文件对象是上层文件对象,它是与应用程序相关联的开放实例,它代表应用程序的文件视图,它包含解密数据,数据被隔离过滤器放入缓存,与缓存管理器协同工作。我们称为的另一个文件对象是影子文件对象,它由隔离迷你过滤器创建,并表示迷你过滤器(以及底层文件系统)对文件的视图。此文件对象的缓存部分中的数据是加密的,隔离迷你过滤器使用影子文件对象与底层文件系统进行交互。影子文件对象是在IRP_MJ_CREATE调度处理程序期间由隔离过滤器驱动程序创建的,并将该影子文件对象发送到底层FSD。为了控制上层文件对象,隔离过滤器将填充文件对象结构的FsContext/FsContext2字段,现在上层文件对象属于隔离过滤器,为了控制缓存,隔离过滤器还将设置SOP结构来指向由过滤器创建的控制数据部分。
隔离过滤器驱动程序的最大挑战是处理由用户发送的上层文件对象的所有IOs,如果上层文件对象被发送到NTFS,NTFS将在一个名为NtfsDecodeFileObject的函数中爆炸。开发隔离迷你过滤器更像是开发完整的Windows文件系统,而不是开发标准迷你过滤器,因为它需要与Windows缓存管理器和内存管理器密切交互。因此,对于大多数不寻求成为Windows文件系统专家的开发人员来说,开发隔离迷你过滤器不太可能是一项能够成功完成的任务。
用于虚拟云存储的隔离迷你过滤器:隔离迷你过滤器模型不仅用于透明数据加密和解密系统。IsolationMinifilter模型也可用于虚拟云存储,它可以向用户呈现虚拟文件结构视图,该视图的数据与远程云存储相关联,当用户读取虚拟文件的数据时,过滤器可以逐块拉回数据。
编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !