w indow s 文件过滤方案设计与实现原理 Window s 文件系统简介 Windows 文件系统是Windows 中非常复杂的一部分,微软设计了诸多机制来提高文件系统的效率,因此,文件过滤驱动是Windows 驱动开发最复杂的部分,完全不同于普通的系统设备驱动开发,在设计文件过滤系统时将要面对非常复杂的问题
首先,Windows 有着复杂的内存映射机制
它将一个文件映射到某个内存空间,需要访问这个文件内容的基础只需要访问这个内存空间即可,然而进程对内存的访问无法被文件过滤驱动捕获
其次,当我们打开Explore 浏览文件时,Explorer 就已经将文件读到文件缓冲中了,office 一类的应用程序通过内存映射的方式来打开word、excel 等文件
文件的内容是通过缺页中断来从硬盘复制到进程空间里的
这是,被内存映射的文件实际上成了一个分页交换文件
一旦进程访问到实际上不存在的内存页(还在硬盘式),就会有一个文件上的页面被交换到内存
在交换发生时,有一个有特殊标记(irp->Flags 带有IRP_PAGING_IO、IRP_SYNCHRONOUS_PAGING_IO或IRP_NOCACHE)的IRP_MJ_READ 请求发送到文件驱动,这种读/写请求被称为分页读/写请求
所幸分页读写请求时文件过滤驱动可以捕获的
我们可以在捕获这个请求后,对于读/写的信息进行加解密操作
Windows具 有巧 妙 的文件缓冲机制,只要一个文件被以缓冲方式打开过,则其内容用的全部或者 一部分就已经保 持 在内存里了
这个部分信息称为文件缓冲,文件缓冲这是全局 的
一般 的说 ,一个文件无论 有多少 个进程在访问,都 只有一份 文件缓冲
应用程序看到的文件内容文件缓冲中的文件内容真实硬盘上的文件内容缓冲写请求分页写请求缓冲读请求分页读请求 图1 Windows 文件读写请求