fly1101
驱动牛犊
驱动牛犊
  • 注册日期2007-10-22
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望93点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:1976回复:1

文件透明加密中写文件死锁问题

楼主#
更多 发布于:2007-12-26 18:05
我是在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个字节呢?
stpaladin
驱动牛犊
驱动牛犊
  • 注册日期2008-06-19
  • 最后登录2010-12-29
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望39点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-07-12 00:27
怎么没有人回答呢
游客

返回顶部