为了让用户能对过滤驱动的功能有选择的进行控制,需要在驱动中加上与应用层进行通信的接口,通过该接口用户向过滤驱动发送用户权限、加密文件类型、加密路径以及算法密钥等信息,过滤驱动在获取这些信息以后根据用户权限采取不同的操作。在驱动中,与应用层进行通信需要涉及IRP_MJ_DEVICE_CONTROL包,因此要定义与之相对应的FSDeviceIoControl例程。
过滤驱动是没有自己的设备名称的,为了能使驱动可以和应用层进行通信,需要为过滤驱动生成一个符号链接,通过下面的代码实现:
RtlInitUnicodeString( &linkString, L”\\DosDevices\\LSFilter”);
Status = IoCreateSymbolicLink( &linkString, &NameString );
应用程序通过该符号链接识别过滤驱动,并将自定义的数据包封装在IRP_MJ_DEVICE_CONTROL包中发送给过滤驱动。FSDeviceIoControl例程则根据IRP_MJ_DEVICE_CONTROL包中的内容填写相应的结构体成员变量。
(5)多策略的实现
为了获取多条加密策略,驱动需要为策略分配一段不可分页内存,可以在DriverEntry例程中通过以下函数实现。
ExAllocatePoolWithTag(NonPagedPool, sizeof(RULE) *21, SFLT_POOL_TAG);
并且把分配所得内存的首地址传递给策略结构体的全局指针变量,在FSDeviceIoControl中通过这个指针变量将用户的设定信息存放到内存中,过滤驱动从内存中读取加密策略控制加密过程。
3 实验与结果分析
加密系统的应用层控制程序的程序界面如图3所示,控制程序要求用户输入需要加密的路径以及加密的文件类型,通过下一策略按钮可以实现多条加密策略的录入。
在实验的Demo程序中要求对硬盘F分区下的所有以txt为后缀的文件进行读写加解密操作。文件写入的明文如图4所示:
卸载驱动以后,在没有进行解密操作的情况下,可以看到实际保存在存储介质上的密文,经过RC4算法加密的密文内容如图5所示:
(责任编辑:adminadmin2008)