dionysus77
驱动小牛
驱动小牛
  • 注册日期2006-11-15
  • 最后登录2011-12-18
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望392点
  • 贡献值0点
  • 好评度177点
  • 原创分0分
  • 专家分0分
阅读:1255回复:4

tooflat的加密代码中SfIssueReadWriteIrpSynchronously函数有误?

楼主#
更多 发布于:2007-04-23 15:38
  加密过程:
FileCtxPtr->DecryptOnRead = FALSE;//明文读
FileCtxPtr->EncryptOnWrite = TRUE;//密文写
Status = SfEncryptDecryptFileByFileObject(DeviceObject, FileObject);

但在具体SfEncryptDecryptFileByFileObject中传递给SfIssueReadWriteIrpSynchronously函数的irpflgs参数始终是0;因此IoBuildSynchronousFsdRequest建立的irp没有nocache标志。这意味着加密过程中真正的磁盘读早已发生,而磁盘写被推迟。所以
FileCtxPtr->DecryptOnRead = FALSE;//明文读
FileCtxPtr->EncryptOnWrite = TRUE;//密文写
这两句就没有意义,因为等cache向disk刷新数据时,读写标志已被另外设置。
幸好,预读以FileCtxPtr->DecryptOnRead = FALSE开始,延迟写以FileCtxPtr->EncryptOnWrite = TRUE结束,因此结果无错,可是如果修改SfSetFileEncrypted等函数试图把文件加密标志写到文件中,就会出现加密标志被cache的问题

不知道上面分析的对不?
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
沙发#
发布于:2007-04-23 16:26
Re:tooflat的加密代码中SfIssueReadWriteIrpSynchronou
DecryptOnRead和EncryptOnWrite 标志的维护实在是件头疼的事情!
人总在矛盾中徘徊。。。
dionysus77
驱动小牛
驱动小牛
  • 注册日期2006-11-15
  • 最后登录2011-12-18
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望392点
  • 贡献值0点
  • 好评度177点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-04-23 17:39
楼上大牛,我刚开始学,本打算加文件头标志,发现太复杂了,现在打算creat是判断并去尾,cleanup加尾,不用处理读写指针,这样是不是容易点?给点建议
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
地板#
发布于:2007-04-23 18:30
Re:tooflat的加密代码中SfIssueReadWriteIrpSynchronou
这样处理从理论上讲的确要简单一些,但是未知的问题也很多!
人总在矛盾中徘徊。。。
dionysus77
驱动小牛
驱动小牛
  • 注册日期2006-11-15
  • 最后登录2011-12-18
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望392点
  • 贡献值0点
  • 好评度177点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-04-23 21:44
Re:Re:tooflat的加密代码中SfIssueReadWriteIrpSynchronou
引用第3楼devia2007-04-23 18:30发表的“Re:tooflat的加密代码中SfIssueReadWriteIrpSynchronou”:
这样处理从理论上讲的确要简单一些,但是未知的问题也很多!

可是看osr上的人都喜欢加文件头,为啥呢?
游客

返回顶部