高手请进,如何使一个类型的文件拒绝访问
如何用delphi编程实现锁定文件类型,比如,.doc文件,当用户想打开时,提示“拒绝访问”等信息,最好有实例,请高手指教。 问题点数:50、回复次数:22Top
1 楼sdzeng(大头鸟)回复于 2006-03-03 16:08:00 得分 0
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;
Top
2 楼sdzeng(大头鸟)回复于 2006-03-03 16:14:17 得分 0
第一个例子再加上
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;
晕,没仔细看
你要所有的一类文件都不能打开啊,
上面例子只能独占打开一个文件
Top
3 楼reagoo()回复于 2006-03-03 16:48:58 得分 0
对,是一种类型的文件。也就是说当其他程序访问之前就要截获文件信息,判断是否是指定的文件类型,如果是则拒绝访问。Top
4 楼reagoo()回复于 2006-03-06 11:53:23 得分 0
怎么了?难道这里的高手们也解决不了这个问题Top
5 楼sdzeng(大头鸟)回复于 2006-03-06 15:10:24 得分 0
这种情况可以试试API Hook,
首先得知道打开文件时用的什么API
比如ShellExcute或者Createfile,Openfile什么的
然后用API Hook监视API调用,在Hook里判断是否允许打开Top
6 楼reagoo()回复于 2006-03-08 15:09:03 得分 0
大哥,具体应该怎么做? 这方面小弟没怎么接触过?Top
7 楼reagoo()回复于 2006-03-13 12:20:22 得分 0
高手门,帮帮忙啊Top
8 楼sdzeng(大头鸟)回复于 2006-03-13 17:35:25 得分 0
API Hook方面的资料很多,去网上搜
不过你这种需求和反病毒引擎比较像,估计API Hook也不一定能很好解决,
去找找IFS hook、文件系统过滤驱动(File System Filter Drivers)方面的资料
功力不够,帮不了你了
Top
9 楼reagoo()回复于 2006-03-14 11:19:41 得分 0
那也要先谢谢你,sdzeng兄.
其他大侠请不吝赐教啊!Top
10 楼apple800(老五)回复于 2006-03-19 12:59:13 得分 0
学习Top
11 楼BlueTrees(蜗牛)回复于 2006-03-19 13:42:48 得分 0
告诉你一个结果
你要的办法,在应用层是做不到的,使用HookAPI是比较麻烦的。你的功力现在绝对不够你操纵这么复杂的方式。
你放弃吧。
还有一种办法,就是2楼那样的,你把所有的这种类型的文件都打开。Top
12 楼reagoo()回复于 2006-03-20 14:07:12 得分 0
真的没有其他办法了吗?
Top
13 楼darkhawlk(黑鹰)回复于 2006-03-21 11:30:43 得分 0
关注中Top
14 楼reagoo()回复于 2006-03-23 12:25:30 得分 0
提一下Top
15 楼reagoo()回复于 2006-03-31 09:04:14 得分 0
再提一下Top
16 楼lxtnt()回复于 2006-04-03 23:09:19 得分 0
像OF_SHARE_EXCLUSIVE这样想以独占方式占有文件的使用权,在98以下的也许可以,但NT以上的就:小文件几十KB的文件是可以,但大文件就行不通了!
只是想:用流或用文件读取(只写方式)文件的数据,无论多少由你定哦!再看一下哦原文件哦!Top
17 楼wuhansen()回复于 2006-04-08 22:12:21 得分 0
不用那么麻烦吧
把文件关联指向你的程序(程序弹出拒绝访问,嘿嘿)
恢复时候把关联改回去不就完了Top
18 楼lxtnt()回复于 2006-04-08 22:27:55 得分 0
不用那么麻烦吧
把文件关联指向你的程序(程序弹出拒绝访问,嘿嘿)
恢复时候把关联改回去不就完了
___________________________________________________
当有其它程序,
把文件关联指向它的程序(程序弹出拒绝访问,嘿嘿)
恢复时候它不把关联改回去不就完了,不就完了,哈哈哈。。。。。Top
19 楼yanxizhen(颜夕真)回复于 2006-04-10 17:10:10 得分 0
跳跳,ring 0.........
Top
20 楼myy()回复于 2006-04-10 17:23:08 得分 0
不用那么麻烦吧
把文件关联指向你的程序(程序弹出拒绝访问,嘿嘿)
恢复时候把关联改回去不就完了
___________________________________________________
人家从菜单“文件”->“打开”...Top
21 楼sdzeng(大头鸟)回复于 2006-04-10 18:13:21 得分 0
建议你去驱网看看,挺不错的一个论坛
http://bbs.zndev.com/thread.php?fid-39.html
Top
22 楼un(我想我是马)回复于 2006-04-11 16:45:39 得分 0
把文件加壳Top




