阅读:1774回复:8
大牛们帮帮忙阿!写加密标识引起的脏页回写问题
我用了一套Io函数来为我加密过的文件写入加密标识(文件尾部),标识是写成功了,但发现文件貌似又被加密了一次,而且连加密标识也被加了密了,请教各位大牛如何解决这个问题阿。不胜感激!
|
|
沙发#
发布于:2009-07-13 21:07
按你目前的方法和思路走下去的话,应该是在文件结尾的部分写入时,判断是不是你已经做了加密标识,然后再决定是否需要写入加密标识。
个人感觉,你的这个方法,会导致文件大小不准确。 特别是文件大小刚好在4K,8K,16K等等这种足K的情况下,会出现一些问题。 以上只是个人看法,不一定正确,请参考。 |
|
板凳#
发布于:2009-07-13 22:22
Since you are using IO functions, there is no way you can prevent flushing dirty pages.
|
|
地板#
发布于:2009-07-14 09:01
回 1楼(xhjjxm) 的帖子
谢谢xhjjxm 建议,我是Build了一个Write的IRP来完成这个事情的,这样子文件大小确实有了改变了。按理说我是从我的驱动直接调用底层来完成这个动作,应该不会触发我的Write例程的,这样理解不知对否? 如果确实会导致脏页回写且二次加密的话,只能另想别的办法了。 |
|
地下室#
发布于:2009-07-14 09:05
回 2楼(michaelgz) 的帖子
谢谢michaelgz,我是自己build了一个Write的IRP来写加密标识的,直接发给底层了阿,应该不会触发Write例程才对的。可以这样理解吗? |
|
5楼#
发布于: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. |
|
7楼#
发布于:2009-07-16 11:08
写的时候,要判断是否有自己的标示。如果是自己的标示(要注意处理跨标示的情况),就不要写。只能这样处理。
|
|
8楼#
发布于:2009-07-16 11:09
写的时候,要判断是否有自己的标示。如果是自己的标示(要注意处理跨标示的情况),就不要加密。只能这样处理。
|
|