您的位置:程序门 -> vc/mfc -> 进程/线程/dll



怎么监视当一个文件删除的时候先copy一份到指定目录然后删除呢?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


怎么监视当一个文件删除的时候先copy一份到指定目录然后删除呢?
发表于:2007-06-19 11:48:07 楼主
有别人用我的电脑.
我想监视文件的删除.当他删除指定目录下的文件的时候,系统先copy一份到指定的另一个目录下下面,然后再执行他的删除操作.
这样我就能知道他删除了什么文件,还能看到他删除的文件的内容.
发表于:2007-06-19 12:09:321楼 得分:0
实现icopyhook
发表于:2007-06-19 12:44:152楼 得分:0
不懂.能介绍详细一点吗?本人对hook一翘不通.
发表于:2007-06-19 12:53:493楼 得分:0
http://www.xaradio.com/develop/2005-9-19/23458/default.aspx
发表于:2007-06-19 14:14:454楼 得分:0
re:   working2006()
    我按照http://www.xaradio.com/develop/2005-9-19/23458/default.aspx做了一个com,并且注册了,也加到注册表了,为什么删除文件的时候没有弹出dialog呢?
copycallback函数为:
uint   __stdcall   ccopyhook::copycallback(hwnd   hwnd,uint   wfunc,uint   wflags,
                                                                              lpctstr   pszsrcfile,dword   dwsrcattribs,
                                                                              lpctstr   pszdestfile,dword   dwdestattribs)
{
                tchar   szmessage[max_path+14];
                wsprintf(szmessage,_t( "对%s进行的操作,是否继续? "),pszsrcfile);
                return   messagebox(null,szmessage,_t( "确认 "),mb_yesno ¦mb_iconexclamation);
}
发表于:2007-06-19 14:40:415楼 得分:0
如果只监视指定目录用目录改变通知.
readdirectorychangesw
发表于:2007-06-21 20:56:396楼 得分:0
hook   api   deletefile
发表于:2007-06-22 11:17:557楼 得分:0
我实现icopyhook,并且回调函数copycallback被调用了.但出现新的问题了.当我删除某个folder的时候,我在回调函数返回之前想拷贝要删除的folder到指定的目录.拷贝操作执行成功了.但删除操作不能继续了.系统提示 "要删除的folder被其他用户或进程占用,无法删除. ".请高手指教.是什么原因?怎么解决呢?

我的回调函数代码是:
uint   __stdcall   ccopyhook::copycallback(hwnd   hwnd,uint   wfunc,uint   wflags,
                                                              lpctstr   pszsrcfile,dword   dwsrcattribs,
                                                              lpctstr   pszdestfile,dword   dwdestattribs)
{
        tchar   szmsg[max_path+14];
        tchar   szfolerarg[max_path+14];

        lptstr   pszsrcfolder   =   (lptstr)pszsrcfile;
        lptstr   pszdestfolder   =   _t( "d:\\testhook ");

        //在回调函数里面实现拷贝功能
        copydirectory(pszsrcfolder,pszdestfolder);

        //开始时我以为是需要点延迟时间,所以加上一段循环,但好像不是这个原因.
        int   i=10000;
        while(i)
        {
                i--;
        }

        //拷贝完毕后提示用户是否继续删除
        wsprintf(szmsg,_t( "对%s进行的操作 "),pszsrcfile);
        return   messagebox(null,szmsg,_t( "确认 "),mb_yesno ¦mb_iconexclamation);
}

//copydirectory函数的实现:
bool   copydirectory(lptstr       strsrcpath,       lptstr       strdestpath)      
{      
        handle   hresult;      
        win32_find_data       findfiledata;      
        tchar     strsrcfilename[max_path],strdestfilename[max_path];      
        bool     blresult;      
        hresult   =   findfirstfile(strsrcpath,&findfiledata);      

        if(hresult   ==   invalid_handle_value)          
return   false       ;      
   
        if(strsrcpath[strlen(strsrcpath)   -   1]   ==   '\\ ')      
strsrcpath[strlen(strsrcpath)   -   1]   =   '\0 ';      

        if(strsrcpath[strlen(strdestpath)   -   1]       ==       '\\ ')      
strsrcpath[strlen(strdestpath)   -   1]       =       '\0 ';      

        hresult   =   findfirstfile(strdestpath,   &findfiledata);      

        if(hresult   ==   invalid_handle_value)        
createdirectory(strdestpath       ,null);      

        strcpy(strsrcfilename,strsrcpath);      
        strcat(strsrcfilename, "\\* ");      

        hresult   =   findfirstfile(strsrcfilename,&findfiledata);      
        if(hresult   ==   invalid_handle_value)          
return   false;        

        if(strcmp(findfiledata.cfilename,   _t( ". "))  
                &&   strcmp(findfiledata.cfilename,_t( ".. ")))      
        {      
strcpy(strsrcfilename,strsrcpath);      
strcat(strsrcfilename, "\\ ");      
strcat(strsrcfilename,findfiledata.cfilename);      
strcpy(strdestfilename,strdestpath);      
strcat(strdestfilename, "\\ ");      
strcat(strdestfilename,findfiledata.cfilename);      

if(findfiledata.dwfileattributes  
                          &   file_attribute_directory   ==   file_attribute_directory)          
copydirectory(strsrcfilename,strdestfilename);        
else          
copyfile(strsrcfilename,strdestfilename,false);          
        }      
        while(1)      
        {      
blresult   =   findnextfile(hresult,&findfiledata);      
if(!blresult)      
        break;      

if(strcmp(findfiledata.cfilename,_t( ". "))
                            &&strcmp(findfiledata.cfilename,_t( ".. ")))              
                  {      
        strcpy(strsrcfilename,strsrcpath);      
        strcat(strsrcfilename, "\\ ");      
        strcat(strsrcfilename,findfiledata.cfilename);      
        strcpy(strdestfilename,strdestpath);      
        strcat(strdestfilename, "\\ ");      
        strcat(strdestfilename,findfiledata.cfilename);      

        dword   wflag   =   findfiledata.dwfileattributes  
                                                          &   file_attribute_directory;
        if(wflag   ==   file_attribute_directory)                   copydirectory(strsrcfilename,strdestfilename);          
        else            
                copyfile(strsrcfilename,strdestfilename,false);        
}      
          }      
          return   true;      
}

发表于:2007-06-22 12:21:318楼 得分:0
findclose在哪儿?你把目录锁上了。
发表于:2007-06-22 15:41:529楼 得分:0
现在,如果是手动删除没个文件夹,可以监视并把文件夹拷贝到指定目录.但是如果我是用代码删除的文件夹(removedirectory(csfolderpath)),我的copyhook就监视不到.为什么?怎么解决呢?
发表于:2007-06-23 16:34:4010楼 得分:0
如果你要阻止用其他软件删除文件的话,那基本上很难做得到,因为第三方删除软件很多使用内核技术删除文件,普通的hook是不能阻止他们的
发表于:2007-06-23 16:40:1711楼 得分:0
如果要做得彻底的话建议你去研究一下ifs驱动程序
发表于:2007-06-25 08:58:3612楼 得分:0
现在hook还没搞清楚呢.又来了一个ifs驱动程序.我怎么什么都不懂呢?两年不知道怎么混的.
发表于:2007-06-25 09:27:0613楼 得分:0
http://topic.csdn.net/t/20030711/14/2016963.html
发表于:2007-11-22 22:00:0214楼 得分:0
 
        我按照http://www.xaradio.com/develop/2005-9-19/23458/default.aspx做了一个com,并且注册了,也加到注册表了,为什么删除文件的时候没有弹出dialog呢?  
copycallback函数为:  
uint       __stdcall       ccopyhook::copycallback(hwnd       hwnd,uint       wfunc,uint       wflags,  
                                                                                                                                                            lpctstr       pszsrcfile,dword       dwsrcattribs,  
                                                                                                                                                            lpctstr       pszdestfile,dword       dwdestattribs)  
{  
                                tchar       szmessage[max_path+14];  
                                wsprintf(szmessage,_t(   "对%s进行的操作,是否继续?   "),pszsrcfile);  
                                return       messagebox(null,szmessage,_t(   "确认   "),mb_yesno   |mb_iconexclamation);  
}
我也到这样的问题啊!也不知道问题出在哪?哪位能给个指点?


快速检索

最新资讯
热门点击