有一个文件,假设是test.txt,我现在要启动一个监控进程,防止这个文件被拷贝到其他地方,但是可以打开这个文件看文件内容。我的做法如下。
1.FileOpen('test.txt',fmShareExclusive);
  以独占方式打开这个文件,可以防止其他进程拷贝这个文件,但是如果我想双击这个文件打开阅读内容,却会提示该文件正在被  另一个进程访问,无法阅读的提示,此方法失败。
2.对CopyFile,CopyFileA,CopyFileW这个函数挂钩——失败
  对CopyFileEx,CopyFileExA,CopyFileExW这个函数挂钩——失败
  对SHFileOperation,SHFileOperationA,SHFileOperationW函数挂钩——失败
3.考虑到复制文件的时候会调用CreateFile这个函数,于是对这个函数挂钩,好像可以实现,但是效果极差。而且还有很多不利因素。——不考虑
4.网上资料说拷贝文件用的终极函数不是CopyFile,而是ZwCopyFile,有人可以告诉我后者在Delphi中如何实现吗?
请问大家有什么好的方法实现我的需求,谢谢。磕头了。在线等。

解决方案 »

  1.   

    >>防止这个文件被拷贝到其他地方,但是可以打开这个文件看文件内容。可能吗?
    我不拷贝这个文件,打开这个文件,然后全选,拷贝…………
      

  2.   

    如果是EXE文件或者其它文件呢怎么COPY 
    我用UE打开,一样可以吧?
      

  3.   

    如果是EXE文件或者其它文件呢怎么COPY 
    我用UE打开,一样可以吧?
    ________________________
    UE打开一个EXE文件,之后全选,粘贴到新的文件里面???
    这样能拷贝?
      

  4.   

    能不能通过windwow消息拦截来处理?
      

  5.   

    可以考虑hook copy函数...具体怎么hook在网上很多的,不详细说不过正如楼上的朋友们说的,如果用户把文件读入内存,再copystream这种就没办法了
    除非把所有和copy相关的都hook了
      

  6.   

    现在要做的事,只是挂个HOOK防止该文件被COPY到别的地方,至于你说的打开文件后,拷到剪切板,我觉得不应该是在该问题中一并解决,
    问题得拆分开来,程序也拆分开来,防止文件打开后的COPY,可以考虑把该文件加密,或是其它什么的.
      

  7.   

    大家说用HOOK的难道没有看清楚我写的内容吗?我对Copy函数都HOOK了的,但是却HOOK不到,大家不相信的话可以自己试试看。
    我考虑了下是不是可以用剪切板监控,但是发现如果我复制的是文件的话,虽然打开剪切板程序可以看到文件的全路径名称,但是却无法用程序代码来获得,大家说说该怎么办?
      

  8.   

    不管是什么文件能打开就能Copy
    最不济写个程序读取这个文件,然后想怎么Copy就怎么Copy