wengzuhong
驱动小牛
驱动小牛
  • 注册日期2004-07-16
  • 最后登录2014-10-22
  • 粉丝3
  • 关注1
  • 积分9分
  • 威望262点
  • 贡献值0点
  • 好评度219点
  • 原创分0分
  • 专家分0分
阅读:3632回复:33

重新开主题: copy问题

楼主#
更多 发布于:2007-07-04 11:05
znsoft、devia、tooflat、xiangxiangren、yaolixing;各位老大,给点提醒好吗???


已经实现了文件的加密和解密。
我在IRP_MJ_CLOSE 里面加上了CcPurgeCacheSection来清空缓存,
复制出去的时候还是以明文出去的;
剪切文件出去的时候就是密文(但是剪切到其他盘符的时候还是明文)。
是不是我还要在其他地方设置什么啊??
wengzuhong
驱动小牛
驱动小牛
  • 注册日期2004-07-16
  • 最后登录2014-10-22
  • 粉丝3
  • 关注1
  • 积分9分
  • 威望262点
  • 贡献值0点
  • 好评度219点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-07-04 11:07
????
我茫然啊啊
哪怕给个提示?????
wengzuhong
驱动小牛
驱动小牛
  • 注册日期2004-07-16
  • 最后登录2014-10-22
  • 粉丝3
  • 关注1
  • 积分9分
  • 威望262点
  • 贡献值0点
  • 好评度219点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-07-04 11:14
yao哥的原话:
      同盘剪切是重命名,其他都是复制,驱动层防止复制,比改变文件长度还麻烦,不是简单刷新cache就可以解决的。



各位帮帮小弟啊,做完的代码,我将共享出来。I sweer!
wengzuhong
驱动小牛
驱动小牛
  • 注册日期2004-07-16
  • 最后登录2014-10-22
  • 粉丝3
  • 关注1
  • 积分9分
  • 威望262点
  • 贡献值0点
  • 好评度219点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-07-04 11:33
难道大家认为这个问题太easy???
没人顶,没人关注?????
???
wengzuhong
驱动小牛
驱动小牛
  • 注册日期2004-07-16
  • 最后登录2014-10-22
  • 粉丝3
  • 关注1
  • 积分9分
  • 威望262点
  • 贡献值0点
  • 好评度219点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-07-04 13:32
顶上去
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2007-07-04 15:06
up一下
在孤独和无助中缓慢前行...
wengzuhong
驱动小牛
驱动小牛
  • 注册日期2004-07-16
  • 最后登录2014-10-22
  • 粉丝3
  • 关注1
  • 积分9分
  • 威望262点
  • 贡献值0点
  • 好评度219点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-07-05 00:08
没人接触过???
wengzuhong
驱动小牛
驱动小牛
  • 注册日期2004-07-16
  • 最后登录2014-10-22
  • 粉丝3
  • 关注1
  • 积分9分
  • 威望262点
  • 贡献值0点
  • 好评度219点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-07-05 15:32
给写思路啊,
顶上去
wengzuhong
驱动小牛
驱动小牛
  • 注册日期2004-07-16
  • 最后登录2014-10-22
  • 粉丝3
  • 关注1
  • 积分9分
  • 威望262点
  • 贡献值0点
  • 好评度219点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-07-05 15:33
MmForceSectionClosed能解决此问题吗???
shenhui
驱动小牛
驱动小牛
  • 注册日期2006-05-11
  • 最后登录2023-02-10
  • 粉丝14
  • 关注11
  • 积分142分
  • 威望1314点
  • 贡献值1点
  • 好评度146点
  • 原创分0分
  • 专家分1分
  • 社区居民
9楼#
发布于:2007-07-05 21:51
一起顶
作一名真实,诚实,优秀的科技工作者!
humerousman
驱动牛犊
驱动牛犊
  • 注册日期2007-04-12
  • 最后登录2007-10-29
  • 粉丝0
  • 关注0
  • 积分390分
  • 威望40点
  • 贡献值0点
  • 好评度39点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-07-06 08:34
给楼主加油!!
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
11楼#
发布于:2007-07-06 11:38
copy问题还是用hook来解决比较好,
主要是粘贴比较难搞定
我有一个hook框架,一起来研究研究?
附件名称/大小 下载次数 最后更新
hookpa.rar (29KB)  46 2007-07-06 11:38
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
12楼#
发布于:2007-07-06 11:56
还有一个比较笨的办法,就是把所有写过的文件记下来,同时把加密过的文件也保存下来,如果有新的文件被写了,就和加密文件比较一下,如果完全一样,就把这个文件给加密掉.
wengzuhong
驱动小牛
驱动小牛
  • 注册日期2004-07-16
  • 最后登录2014-10-22
  • 粉丝3
  • 关注1
  • 积分9分
  • 威望262点
  • 贡献值0点
  • 好评度219点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-07-06 15:46
lsxredrain老大,我在close中添加了一段清除cache的代码,
结果:
原来是密文的文件c:\A.txt  copy to  d:\A.txt
d:\A.txt 也是密文了.
难道就这么简单的就解决了???
wengzuhong
驱动小牛
驱动小牛
  • 注册日期2004-07-16
  • 最后登录2014-10-22
  • 粉丝3
  • 关注1
  • 积分9分
  • 威望262点
  • 贡献值0点
  • 好评度219点
  • 原创分0分
  • 专家分0分
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);
   }
}
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
15楼#
发布于:2007-07-06 16:35
这个方法可行的,不过还是需要判断是否真的是copy,要和普通的文件读写和系统遇读区分开来.
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
16楼#
发布于:2007-07-06 16:57
如果不是文件内部copy,可以把打开过的加密文件的特征保存下来,一旦有新的文件copy时,和加密文件特征列表比较一下就知道要不要加密了.这些操作在驱动中都可以完成.
wengzuhong
驱动小牛
驱动小牛
  • 注册日期2004-07-16
  • 最后登录2014-10-22
  • 粉丝3
  • 关注1
  • 积分9分
  • 威望262点
  • 贡献值0点
  • 好评度219点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2007-07-06 17:51
普通的文件读写和系统遇读区分开来????
如果没区分,会出现什么结果???
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
18楼#
发布于:2007-07-06 18:11
txt是最简单的文件,象xls,dwg,doc等就会出问题的.
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
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了.
上一页
游客

返回顶部