2 基于文件系统过滤驱动的多策略加密程序设计
基于文件系统过滤驱动加密程序包括应用程序和过滤驱动程序。应用程序提供用户界面,完成设置多条加密路径或者指定多个加密文件类型,设定用户权限等功能。过滤驱动则根据接受到的要求信息,对指定的文件进行加解密。过滤驱动的加解密对用户是透明的。
过滤驱动程序的核心是在驱动中定义处理IRP包的处理例程。主要包括: IRP_MJ_CREATE、IRP_MJ_WRITE、IRP_MJ_READ和IRP_MJ_DEVICE_CONTROL。
(1)FSCreate例程
FSCreate例程用来处理IRP_MJ_CREATE包。在该例程中,主要完成文件信息的记录以及添加加密标示等功能。当需要用户对文件进行打开或者创建时,I/O管理器就会向文件系统发出IRP_MJ_CREATE包。过滤驱动调用FSCreate例程进行处理时,首先需要获取文件对象的完整路径,以判断加解密路径。在文件驱动中,完整的文件路径分为两个部分:根目录名和路径名。由于在设备对象中不直接保存文件的根目录名而保存的是设备名称(如C盘的名称是“Device\HardDiskVolume0”),因此需要调用ZwQuerySymbolicLinkObject函数将设备名称转换成盘符,然后结合文件对象中保存的路径名称获得全路径名。接下来例程将会判断文件的加密标志是否存在,并根据判断结果对文件对象相应的标志位进行填写。
(2)FSWrite例程
FSWrite例程与IRP_MJ_WRITE包相对应,主要对用户需要写入存储介质的信息进行加密处理。为了保证缓存中数据的一致性,例程不能直接对IRP包中Cache空间的信息进行加密处理,而是重新申请一块与Cache空间大小相同的内存空间,将IRP包中Cache空间的信息拷贝下来,作加密处理后再传递给下层设备对象。
(3)FSRead例程
FSRead例程与IRP_MJ_READ包对应,主要对用户需要从存储介质读出的加密信息进行解密的操作,处理的过程也与FSWrite例程相类似,但是文件系统在接到读请求时,是通过调用磁盘驱动获取存储信息的,当文件系统接收到IRP_MJ_READ包时,数据还没有到达。过滤驱动需要等待磁盘驱动返回操作成功以后,再对数据进行解密操作。因此需要对FSRead例程定义一个完成例程FSReadCompletion,并在完成例程中完成对数据的解密操作。
在对较大的文件进行读写时,系统会将文件内容分成多个IRP包进行传送,为了保证前后有效信息的一致性,应尽量选择流加密算法。
(责任编辑:adminadmin2008)