阅读:1975回复:1
文件透明加密中写文件死锁问题
我是在IRP有标记IRP_NOCACHE或IRP_PAGING_IO或IRP_SYNCHRONOUS_PAGING_IO时进行加密。(缓冲区中为明文)
由于采用的是分组密码体制,所以在加密时,如果文件大小不是分组大小的整数倍,那么最后一个分组需要补0使其为一个分组大小。 现在在文件刚好是分组大小的整数倍时,加密程序已经没问题了。但在文件大小不是分组大小的整数倍时,情况如下: 我在应用层创建了一个带缓冲的文件句柄,并写入了519个字节。 我在过滤驱动中拦截了带有IRP_NOCACHE、IRP_PAGING_IO和IRP_SYNCHRONOUS_PAGING_IO的IRP,此时,irpsp->Parameters.Write.Length中是要写入的字节数等于1024字节(这个值一定为扇区大小的整数倍,我的分组大小为128位,扇区大小为512字节,所以这个值又一定为分组大小的整数倍)。由于这里并不知道实际成功写入了多少字节,所以对1024个字节进行了加密。 但下层驱动在实际写文件时,遇到了文件尾,只写入了519字节,此时就要对最后7个字节进行修正。 这时,分页写操作已经完成,所以只有自己重新创建IRP包修正最后7个字节,但问题出现了: 当IRP带有IRP_PAGING_IO或IRP_SYNCHRONOUS_PAGING_IO时,这时使用上层传来的FileObject自己构造IRP包写文件,在把IRP包发给下层驱动时,发生了死锁。通过引用自己用ZwCreateFile创建的句柄的FileObject也会死锁。 请问有经验的前辈,怎么才能避免死锁呢?或者有什么好的方法来避免修正最后7个字节呢? |
|
沙发#
发布于:2008-07-12 00:27
怎么没有人回答呢
|
|