阅读:3632回复:33
重新开主题: copy问题
znsoft、devia、tooflat、xiangxiangren、yaolixing;各位老大,给点提醒好吗???
已经实现了文件的加密和解密。 我在IRP_MJ_CLOSE 里面加上了CcPurgeCacheSection来清空缓存, 复制出去的时候还是以明文出去的; 剪切文件出去的时候就是密文(但是剪切到其他盘符的时候还是明文)。 是不是我还要在其他地方设置什么啊?? |
|
沙发#
发布于:2007-07-04 11:07
????
我茫然啊啊 哪怕给个提示????? |
|
板凳#
发布于:2007-07-04 11:14
yao哥的原话:
同盘剪切是重命名,其他都是复制,驱动层防止复制,比改变文件长度还麻烦,不是简单刷新cache就可以解决的。 各位帮帮小弟啊,做完的代码,我将共享出来。I sweer! |
|
地板#
发布于:2007-07-04 11:33
难道大家认为这个问题太easy???
没人顶,没人关注????? ??? |
|
地下室#
发布于:2007-07-04 13:32
顶上去
|
|
5楼#
发布于:2007-07-04 15:06
up一下
|
|
|
6楼#
发布于:2007-07-05 00:08
没人接触过???
|
|
7楼#
发布于:2007-07-05 15:32
给写思路啊,
顶上去 |
|
8楼#
发布于:2007-07-05 15:33
MmForceSectionClosed能解决此问题吗???
|
|
9楼#
发布于:2007-07-05 21:51
一起顶
|
|
|
10楼#
发布于:2007-07-06 08:34
给楼主加油!!
|
|
11楼#
发布于:2007-07-06 11:38
copy问题还是用hook来解决比较好,
主要是粘贴比较难搞定 我有一个hook框架,一起来研究研究? |
|
|
12楼#
发布于:2007-07-06 11:56
还有一个比较笨的办法,就是把所有写过的文件记下来,同时把加密过的文件也保存下来,如果有新的文件被写了,就和加密文件比较一下,如果完全一样,就把这个文件给加密掉.
|
|
13楼#
发布于:2007-07-06 15:46
lsxredrain老大,我在close中添加了一段清除cache的代码,
结果: 原来是密文的文件c:\A.txt copy to d:\A.txt d:\A.txt 也是密文了. 难道就这么简单的就解决了??? |
|
14楼#
发布于:2007-07-06 15:48
看看我加的代码(也是一个老大的原码)
void ManageFileCache(PFILE_OBJECT pFileObject, BOOLEAN bClearOrFlush) { PFSRTL_COMMON_FCB_HEADER pFcb; LARGE_INTEGER liInterval; BOOLEAN bNeedReleaseResource = FALSE; BOOLEAN bNeedReleasePagingIoResource = FALSE; KIRQL irql; pFcb = (PFSRTL_COMMON_FCB_HEADER)pFileObject->FsContext; if(pFcb == NULL) { return; } irql = KeGetCurrentIrql(); if (irql >= DISPATCH_LEVEL) { return; } liInterval.QuadPart = -1 * (LONGLONG)50; while (TRUE) { BOOLEAN bBreak = TRUE; BOOLEAN bLockedResource = FALSE; BOOLEAN bLockedPagingIoResource = FALSE; bNeedReleaseResource = FALSE; bNeedReleasePagingIoResource = FALSE; if (pFcb->PagingIoResource) { bLockedPagingIoResource = ExIsResourceAcquiredExclusiveLite(pFcb->PagingIoResource); } if (pFcb->Resource) { bLockedResource = TRUE; if (ExIsResourceAcquiredExclusiveLite(pFcb->Resource) == FALSE) { bNeedReleaseResource = TRUE; if (bLockedPagingIoResource) { if (ExAcquireResourceExclusiveLite(pFcb->Resource, FALSE) == FALSE) { bBreak = FALSE; bNeedReleaseResource = FALSE; bLockedResource = FALSE; } } else { ExAcquireResourceExclusiveLite(pFcb->Resource, TRUE); } } } //if (bBreak) if (bLockedPagingIoResource == FALSE) { if (pFcb->PagingIoResource) { bLockedPagingIoResource = TRUE; bNeedReleasePagingIoResource = TRUE; if (bLockedResource) { if (ExAcquireResourceExclusiveLite(pFcb->PagingIoResource, FALSE) == FALSE) { bBreak = FALSE; bLockedPagingIoResource = FALSE; bNeedReleasePagingIoResource = FALSE; } } else { ExAcquireResourceExclusiveLite(pFcb->PagingIoResource, TRUE); } } } if (bBreak) { break; } if (bNeedReleasePagingIoResource) { ExReleaseResourceLite(pFcb->PagingIoResource); } if (bNeedReleaseResource) { ExReleaseResourceLite(pFcb->Resource); } if (irql == PASSIVE_LEVEL) { KeDelayExecutionThread(KernelMode, FALSE, &liInterval); } else { KEVENT waitEvent; KeInitializeEvent(&waitEvent, NotificationEvent, FALSE); KeWaitForSingleObject(&waitEvent, Executive, KernelMode, FALSE, &liInterval); } } //加锁完毕 if (pFileObject->SectionObjectPointer) { if (bClearOrFlush == FALSE) { IO_STATUS_BLOCK ioStatus; CcFlushCache(pFileObject->SectionObjectPointer, NULL, 0, &ioStatus); if (pFileObject->SectionObjectPointer->ImageSectionObject) { MmFlushImageSection(pFileObject->SectionObjectPointer, MmFlushForWrite);//MmFlushForDelete } } CcPurgeCacheSection(pFileObject->SectionObjectPointer, NULL, 0, FALSE); } if (bNeedReleasePagingIoResource) { ExReleaseResourceLite(pFcb->PagingIoResource); } if (bNeedReleaseResource) { ExReleaseResourceLite(pFcb->Resource); } } |
|
15楼#
发布于:2007-07-06 16:35
这个方法可行的,不过还是需要判断是否真的是copy,要和普通的文件读写和系统遇读区分开来.
|
|
16楼#
发布于:2007-07-06 16:57
如果不是文件内部copy,可以把打开过的加密文件的特征保存下来,一旦有新的文件copy时,和加密文件特征列表比较一下就知道要不要加密了.这些操作在驱动中都可以完成.
|
|
17楼#
发布于:2007-07-06 17:51
普通的文件读写和系统遇读区分开来????
如果没区分,会出现什么结果??? |
|
18楼#
发布于:2007-07-06 18:11
txt是最简单的文件,象xls,dwg,doc等就会出问题的.
|
|
19楼#
发布于:2007-07-08 17:05
顺利解决文件外部copy问题!!!
1. a.txt-> a.txt1 copy->b.txt1 2.a.txt copy->a.txt1 3.a.txt copy-> a.txt 这几种情况都可以防住了 文件内部copy问题只能靠hook了. |
|
上一页
下一页