阅读:2069回复:18
关于新建WORD时加密的问题
请问,新建WORD时会产生很多tmp文件,我要加密时是否要将tmp文件也加密呢,还是在删除tmp时再加密呢,请大家帮忙
[编辑 - 6/15/05 by xuAmigo] |
|
最新喜欢:znsoft |
沙发#
发布于:2005-06-15 16:30
word文档在保存的时候首先将内容保存在tmp里面,然后再将tmp重命名为.doc,所以应该对tmp加密。
|
|
板凳#
发布于:2005-06-15 17:03
我加密了tmp文件后,整个WORD文件的长度就改变了变长了,有很多的临时文件要处理,高手们请帮忙吧
|
|
地板#
发布于:2005-06-16 12:22
新建WORD时,我在重命名后且文件被关闭时进行加密,但为什么不能加密呢,请高手帮忙,我给50分
|
|
地下室#
发布于:2005-06-17 15:54
顶
|
|
5楼#
发布于:2005-06-18 10:54
请问楼上的,你在关闭的时候怎么加密文件,代码贴出来看看
|
|
6楼#
发布于:2005-06-18 11:37
我这个方法不对,在改名时设了一个标记,然后在关闭时设置加密标记,但发现irp_mj_write不是紧跟着在close后执行的,因此加密时已晚了不成功。请问你在新建WORD时有没有调试到 52 43 52 44 28 等数据,我不知道这表示什么,它是在新建空文档时出现的。
|
|
7楼#
发布于:2005-06-18 12:11
对word文档的处理太麻烦了,如果你照现在的方法继续做下去会发疯的,我以前也尝试在要处理的文件前面添加加密标志,读文件和写文件的时候首先判断该文件是否存在头,然后决定是否加解密。
文件可以添加头(这个基本上算是成功了),读取和写入的时候也可以通过这个头来判断是否加密,可是由于自己加了头(或者采用分组加密算法)可能导致文件的长度大于原来的长度,你还需要处理文件增大以后的问题,你必须向用户隐藏文件头的存在。总之,这样做十分麻烦,头疼! :( |
|
8楼#
发布于:2005-06-18 12:20
那请问你对新建WORD加密如何处理的,对拷贝WORD文件倒好处理的因为它没临时文件,老板一直催我,已到最后期限,做不出来只好走人,我只得求助与这里的朋友们了
|
|
9楼#
发布于:2005-06-18 14:28
基于目录的加密,无论里面是word还是什么别的文件,一律加密,就不用处理临时文件了,加密标识采用的是自己建立临时数据库,存放加密文件的信息。
|
|
10楼#
发布于:2005-06-18 14:44
你的帖子上提到你采用的就是基于目录级的加密,不用考虑什么word文档还是什么别的类型文件,只要write就加密,read就解密。
我现在也采用类似的方法。但是在从explorer文件菜单中新建一个空的word文档时,写到磁盘上已经加了密,但是立即打开时,不从磁盘读取,却还是密文。 请问您是如何处理的?谢谢 |
|
11楼#
发布于:2005-06-18 15:04
没有什么特殊处理啊,只要你保证用户缓冲区始终为明文就可以了。
|
|
12楼#
发布于:2005-06-23 11:13
我基本采纳了你的意见,但还有一点实现不了,现在加密标记我也不采用改变文件长度了,但在某个目录下新建WORD时就加密了(注意,这个WORD是空DOC文件),还没有编辑它就加密了。我要的效果是先新建一个空DOC文件然后能打开,并编辑后再加密,这个要求可以实现吗。
|
|
13楼#
发布于:2005-06-23 11:33
新建Word文件的时候,office自动会在这个word文档前面添加10K左右的数据,可能用来定义word文档的格式什么的,这就必然需要写操作,所以就被加密了,但是没有关系,等你打开这个新建的文档的时候不是又解密了吗,这样你看到的word文件还是明文啊,照样能够编辑的。
|
|
14楼#
发布于:2005-06-23 11:46
等你打开这个新建的文档的时候不是又解密了吗
////////////////////////////////////////////////////////////////////////////////////////////////////////////// 这句话我不赞同,因为新建WORD文件后,再打开时又不是从磁盘上读文件,因此又不解密了呀,你可不可以将你的新建WORD的部分代码贴上来呀,还有你说的“保证用户缓冲区始终为明文”具体指什么,我在下面的帖子上贴了我的部分代码,不知指的是不是OldBuffer. |
|
15楼#
发布于:2005-06-23 12:47
if( !((Irp->Flags & IRP_NOCACHE) ||
(Irp->Flags & IRP_PAGING_IO) || (Irp->Flags & IRP_SYNCHRONOUS_PAGING_IO)) ) { IoSkipCurrentIrpStackLocation(Irp); return IoCallDriver(hookExt->FileSystem, Irp); } DownTransfer = ExAllocatePool(NonPagedPool, sizeof(DOWN_TRANSFER)); if(DownTransfer == NULL) return CompleteRequest(Irp, STATUS_INSUFFICIENT_RESOURCES, 0); DownTransfer->MdlAddress = Irp->MdlAddress; DownTransfer->UserBuffer = Irp->UserBuffer; if(Irp->MdlAddress){//Direct I/O Method SysBuffer = (PUCHAR)MmGetSystemAddressForMdlSafe( Irp->MdlAddress, NormalPagePriority ); if(SysBuffer == NULL) { ExFreePool(DownTransfer); return CompleteRequest(Irp, STATUS_INSUFFICIENT_RESOURCES, 0); } } else SysBuffer = Irp->UserBuffer; BufferSize = currentIrpStack->Parameters.Write.Length; MyBuffer = ExAllocatePool(NonPagedPool, BufferSize); if(MyBuffer == NULL) { ExFreePool(DownTransfer); return CompleteRequest(Irp, STATUS_INSUFFICIENT_RESOURCES, 0); } //这里将用户缓冲区拷贝给新建的加密缓冲区,然后加密 RtlZeroMemory(MyBuffer, BufferSize); RtlCopyMemory(MyBuffer, SysBuffer, BufferSize); Encrypt( MyBuffer, BufferSize, FileEncryptAlgorithm, FileEncryptKey, FileEncryptKeyLen ); DownTransfer->MyBuffer = MyBuffer; Irp->MdlAddress = IoAllocateMdl(MyBuffer, BufferSize, FALSE, FALSE, NULL); if(!Irp->MdlAddress) { DbgPrint(("IoAllocateMdl call failed\n")); ExFreePool(DownTransfer); ExFreePool(MyBuffer); return CompleteRequest(Irp, STATUS_INSUFFICIENT_RESOURCES, 0); } MmBuildMdlForNonPagedPool(Irp->MdlAddress); Irp->UserBuffer = MmGetMdlVirtualAddress(Irp->MdlAddress); IoCopyCurrentIrpStackLocationToNext(Irp); IoSetCompletionRoutine( Irp, FilemonWriteCompleted, DownTransfer, TRUE, TRUE, TRUE ); return IoCallDriver(hookExt->FileSystem, Irp); 完成例程: PDOWN_TRANSFER DownTransfer = (PDOWN_TRANSFER)Context; if( Irp->PendingReturned ) IoMarkIrpPending( Irp ); if(Irp->MdlAddress) { IoFreeMdl(Irp->MdlAddress); Irp->MdlAddress = DownTransfer->MdlAddress; Irp->UserBuffer = DownTransfer->UserBuffer; ExFreePool(DownTransfer->MyBuffer); ExFreePool(DownTransfer); } return Irp->IoStatus.Status; |
|
16楼#
发布于:2005-06-23 12:49
所有的文件都一样处理,并没有对新建word文档有什么特殊处理。
|
|
17楼#
发布于:2005-06-23 14:17
我的程序和你的差不多,没有对原缓冲区进行处理只对新的缓冲区进行处理,你可否讲一下你新建WORD文件的结果呀,我还是老样子,新建了空WORD文档后立即打开就打不开了因为是密文了,
|
|
18楼#
发布于:2005-06-23 15:45
我说过了,新建任何文件都一样,新建以后立刻就可以打开,而且加解密正常。出现你说的现象说明你的缓存里面还是密文,可能哪里出问题了。仔细检查一下吧。
|
|