阅读:1644回复:15
问个关于加密必须重新启动才能加密的问题,也请zhaock大哥进来拿分
我是修改的filemon来做的加密,有个很奇怪的问题,我加密的文件必须在机器重新启动后才能显示出密文来?这个是怎么回事情啊?
如果我直接对 if (Irp->MdlAddress){ SysDataBuf = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority); } else{ SysDataBuf = Irp->UserBuffer; } SysDataBuf进行修改的话,显示的是密文(不需要重新启动)。 但是这样的话,解密又一直解不出来。 [编辑 - 5/25/05 by Hell_Fire_1981] [编辑 - 5/25/05 by Hell_Fire_1981] |
|
沙发#
发布于:2005-05-25 11:21
不要对SysDataBuf直接进行修改,这样你的缓存当中也变成密文了。
你的问题应该还是缓存的问题,也就是说实际上磁盘上的文件已经变成密文,可是操作系统一般只有在第一次访问文件的时候才会从磁盘上读取文件内容,而一旦读取出来了,就保存在系统缓存当中。以后再次访问该文件读取的是缓存中的内容,自然就是明文了。 |
|
板凳#
发布于:2005-05-25 15:59
那具体应该怎么处理呢???
|
|
地板#
发布于:2005-05-25 17:21
我给你发了,很简单,没有调试。你先调试一下,没问题了。再来解决这个问题
|
|
地下室#
发布于:2005-05-25 19:20
joshua_yu
说的很对,就是缓存的问题, |
|
5楼#
发布于:2005-05-26 14:37
具体是怎么解决的?
我也遇到这个问题了。 谢谢 |
|
6楼#
发布于:2005-05-26 18:03
我现在是在IRP_MJ_CLOSE里面加了清内存
CcPurgeCacheSection 来实现的,不过还是存在问题,比如我剪切到别的地方就没有问题,但是用复制的时候,复制出去的文件就是明文的了。 |
|
7楼#
发布于:2005-05-26 18:15
我也测试了,复制出去的是明文。
我想还是缓存的问题。 |
|
8楼#
发布于:2005-05-27 08:43
如果你正在打开某个文档,它的内容当然应该还在缓存中的,这个是没有办法的,除非在应用层处理,例如处理禁止剪贴板拷贝,禁止文件另存为的操作等等,单纯利用驱动程序是不行的。
|
|
9楼#
发布于:2005-05-27 09:49
如果把系统缓存也写成密文会不会有很大的影响??
|
|
10楼#
发布于:2005-05-27 12:11
把系统缓存写成密文,我也试过了,但是有个问题就是,我解密的时候始终是密文,也就是不能解密。
to:joshua_yu 我是在关闭的时候拷贝的,但是出去的还是明文! 而且我在IRP_MJ_CLOSE 加了CcPurgeCacheSection 还是没有用,只有在剪切的时候才可以! |
|
11楼#
发布于:2005-05-27 12:28
把系统缓存写成密文,我也试过了,但是有个问题就是,我解密的时候始终是密文,也就是不能解密。 [编辑 - 5/27/05 by joshua_yu] [编辑 - 5/27/05 by joshua_yu] |
|
12楼#
发布于:2005-05-27 13:47
to:joshua_yu
千万不要把缓存也变成明文,这样你的程序怎么编辑内容呢? 这句话什么意思呢??难道要让缓存里的也是密文???? |
|
13楼#
发布于:2005-05-27 13:53
sorry!说错了,呵呵,应该是密文才对,缓存应该始终保持为明文。
|
|
14楼#
发布于:2005-05-27 13:58
呵呵,可是我是在关闭文件后,进行拷贝的。可是出去的还是明文,我用剪切的时候出去的就是密文,这个是怎么回事啊???
|
|
15楼#
发布于:2005-05-27 15:16
我看我和你的问题差不多,真的是很奇怪的。
我在监视的目录下新建文件,没有问题是密文的。我拖一个文件进去,就是明文的,这个我觉得是因为拖进去的时候可能只修改了文件系统的一些指针,并没有把DISK上的内容复制,不知道对不对? 另外,刷新缓存。我如果解密的功能不开,那么我新建一个文件,关闭再打开就已经是密文了,说明已经刷新。如果我解密功能开了,我新建立一个文件,并把他COPY出来,结果还是明文??? 真是晕。 |
|