chenyn
驱动牛犊
驱动牛犊
  • 注册日期2006-07-02
  • 最后登录2011-11-18
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望151点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分1分
阅读:1641回复:8

大牛们帮帮忙阿!写加密标识引起的脏页回写问题

楼主#
更多 发布于:2009-07-13 16:33
我用了一套Io函数来为我加密过的文件写入加密标识(文件尾部),标识是写成功了,但发现文件貌似又被加密了一次,而且连加密标识也被加了密了,请教各位大牛如何解决这个问题阿。不胜感激!
xhjjxm
驱动小牛
驱动小牛
  • 注册日期2005-08-03
  • 最后登录2010-07-28
  • 粉丝0
  • 关注0
  • 积分1011分
  • 威望208点
  • 贡献值0点
  • 好评度87点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-07-13 21:07
按你目前的方法和思路走下去的话,应该是在文件结尾的部分写入时,判断是不是你已经做了加密标识,然后再决定是否需要写入加密标识。

个人感觉,你的这个方法,会导致文件大小不准确。
特别是文件大小刚好在4K,8K,16K等等这种足K的情况下,会出现一些问题。

以上只是个人看法,不一定正确,请参考。
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
板凳#
发布于:2009-07-13 22:22
Since you are using IO functions, there is no way you can prevent flushing dirty pages.
chenyn
驱动牛犊
驱动牛犊
  • 注册日期2006-07-02
  • 最后登录2011-11-18
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望151点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分1分
地板#
发布于:2009-07-14 09:01
回 1楼(xhjjxm) 的帖子
谢谢xhjjxm 建议,
我是Build了一个Write的IRP来完成这个事情的,这样子文件大小确实有了改变了。按理说我是从我的驱动直接调用底层来完成这个动作,应该不会触发我的Write例程的,这样理解不知对否?
如果确实会导致脏页回写且二次加密的话,只能另想别的办法了。
chenyn
驱动牛犊
驱动牛犊
  • 注册日期2006-07-02
  • 最后登录2011-11-18
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望151点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分1分
地下室#
发布于:2009-07-14 09:05
回 2楼(michaelgz) 的帖子
谢谢michaelgz,
我是自己build了一个Write的IRP来写加密标识的,直接发给底层了阿,应该不会触发Write例程才对的。可以这样理解吗?
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
5楼#
发布于:2009-07-14 22:20

我是自己build了一个Write的IRP来写加密标识的,直接发给底层了阿,应该不会触发Write例程才对的。可以这样理解吗?


No, I don't think so. The cache is maintained by lower file system together with CM. Remember cache data is just a map of on-disk data. If on-disk data changed, cache data should be refreshed, if cache data updated, on-disk data should be updated. Though those refreshes or updates may not happen immediately, they will happen eventually. These two sets of data must be in-sync.

And don't forget WRITE can happen concurrently.
chenyn
驱动牛犊
驱动牛犊
  • 注册日期2006-07-02
  • 最后登录2011-11-18
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望151点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分1分
6楼#
发布于:2009-07-15 11:17
引用第5楼michaelgz于2009-07-14 22:20发表的  :


No, I don't think so. The cache is maintained by lower file system together with CM. Remember cache data is just a map of on-disk data. If on-disk data changed, cache data should be refreshed, if cache data updated, on-disk data should be updated. Though those refreshes or updates may not happen immediately, they will happen eventually. These two sets of data must be in-sync.

And don't forget WRITE can happen concurrently.

Thank you for your help,
It's true,If there's any dirty page.It will be updated and rewrote into the file.And then the encrypted flag and the file content will be encrypted by my filter dirver.Thus, It's possible for me to get this encrypted flag and decrypt it for further use.
fazwh
驱动牛犊
驱动牛犊
  • 注册日期2005-09-11
  • 最后登录2020-11-18
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望303点
  • 贡献值0点
  • 好评度48点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2009-07-16 11:08
写的时候,要判断是否有自己的标示。如果是自己的标示(要注意处理跨标示的情况),就不要写。只能这样处理。
fazwh
驱动牛犊
驱动牛犊
  • 注册日期2005-09-11
  • 最后登录2020-11-18
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望303点
  • 贡献值0点
  • 好评度48点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2009-07-16 11:09
写的时候,要判断是否有自己的标示。如果是自己的标示(要注意处理跨标示的情况),就不要加密。只能这样处理。
游客

返回顶部