如何用delphi编程实现锁定文件类型,比如,.doc文件,当用户想打开时,提示“拒绝访问”等信息,最好有实例,请高手指教。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
        f : HFILE;
        s : TOfStruct;
    begin
        s.cBytes := SizeOf(s);
        s.fFixedDisk := 0;
        strpcopy(s.szPathName,'E:\a.txt');
        f := OpenFile('E:\a.txt',s,OF_SHARE_EXCLUSIVE);
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
        f : THandle;
        sa : TSecurityAttributes;
    begin
        FillChar(sa, SizeOf(sa), #0);
        sa.nLength := SizeOf(sa);
        sa.lpSecurityDescriptor := nil;
        sa.bInheritHandle := True;
        f := CreateFile('E:\a.txt', GENERIC_READ or GENERIC_WRITE,
            0, @sa, OPEN_EXISTING,
            FILE_ATTRIBUTE_Normal, 0);
        //CloseHandle(f);关闭文件,允许其他程序访问
    end;
      

  2.   

    第一个例子再加上
    procedure TForm1.Button1Click(Sender: TObject);
    var
        f : HFILE;
        s : TOfStruct;
    begin
        s.cBytes := SizeOf(s);
        s.fFixedDisk := 0;
        strpcopy(s.szPathName,'E:\a.txt');
        f := OpenFile('E:\a.txt',s,OF_SHARE_EXCLUSIVE);
        //_lclose(f);关闭文件,允许其他程序访问
    end;晕,没仔细看
    你要所有的一类文件都不能打开啊,
    上面例子只能独占打开一个文件
      

  3.   

    这种情况可以试试API Hook,
    首先得知道打开文件时用的什么API
    比如ShellExcute或者Createfile,Openfile什么的
    然后用API Hook监视API调用,在Hook里判断是否允许打开
      

  4.   

    API Hook方面的资料很多,去网上搜不过你这种需求和反病毒引擎比较像,估计API Hook也不一定能很好解决,
    去找找IFS hook、文件系统过滤驱动(File System Filter Drivers)方面的资料功力不够,帮不了你了
      

  5.   

    那也要先谢谢你,sdzeng兄.其他大侠请不吝赐教啊!
      

  6.   

    告诉你一个结果你要的办法,在应用层是做不到的,使用HookAPI是比较麻烦的。你的功力现在绝对不够你操纵这么复杂的方式。你放弃吧。还有一种办法,就是2楼那样的,你把所有的这种类型的文件都打开。
      

  7.   

    像OF_SHARE_EXCLUSIVE这样想以独占方式占有文件的使用权,在98以下的也许可以,但NT以上的就:小文件几十KB的文件是可以,但大文件就行不通了!
      只是想:用流或用文件读取(只写方式)文件的数据,无论多少由你定哦!再看一下哦原文件哦!
      

  8.   

    建议你去驱网看看,挺不错的一个论坛
    http://bbs.zndev.com/thread.php?fid-39.html