精典的ASP传奇的J2EE新生的NETFTP服务器服务器安全WINDOWSB/S 模式WEB安全WAP世界动态网站推广宣传
空间服务器数据库技术邮局服务器站長工具硬设与组建Alexa专题DHTML项目管理WEB标准电脑硬件
病毒知识电脑使用布线协议接入交换路由局域网无线网络网络规划
Visual BasicVisual C/C++MssqlMySqloracleSybase 存在安全风险进程系统进程列表应用程序进程列表其它进程列表
黑客编程漏洞分析本地提权免杀技术脚本漏洞数据库注入安全防护内网渗透加密解密工具使用
WAP技术WAP入门
 您的位置:   >> 相关知识 >> 桌面应用程序 >> Visual Basic >>

本地目录的只读控制(禁止写、删除、新建)

合金网络科技

 
  添加日期:2007-5-17 点击次数:236次  
   
  几句废话:
这是我在驱网发的第二篇文章,第一篇是关于利用过滤驱动将U盘设置为只读的。
这篇是利用文件系统过滤驱动将一个目录(本地硬盘)设置为只读,包括禁止修改
文件,禁止删除文件,禁止新建文件等。 我最终的目的是想实现 利用文件过滤驱动
将任意盘(包括移动,A等)设置为只读。因此我的路还很长,还需要各位的帮助。

正文:
0 准备工作:
由于是对文件、目录的拦截。首先要知道如何得到路径、文件名、盘符等等。否则
你没有办法去做判断。我使用IFS 中的sfilter修改。因此没有filemon那样有直接的
函数取得。
在驱动中取得盘符和路径是分开的。取得盘符使用RtlVolumeDeviceToDosName (file->DeviceObject,&dosname); 取得路径的方法是:
irpSp = IoGetCurrentIrpStackLocation( Irp );
file = irpSp->FileObject;
RtlCopyUnicodeString(&name,&file->FileName);
DbgPrint(\'%ws\',(&name)->Buffer);// 这个地方直接用name.Buffer什么也打印不出来,奇怪
但是这里要注意的是并不是每一个IRP中的irpSp->FileObject都有,很多时候是NULL。这个值有
文件系统来填写。所以在取路径前一定要做相应的判断,否则会蓝屏。

1 禁止访问目录:
实现禁止访问目录是比较简单的,有很多的方法。我是在IRP_MJ_DIRECTORY_CONTROL
中判断是不是要禁止的目录,然后拦截。拦截的操作我就不多说了,基本一样:
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;
Irp->IoStatus.Information = 0;
status = Irp->IoStatus.Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return status;

2 设置目录为只读
由于禁止目录访问的方法很容易,所以很容易让人觉得禁止写是不是就是在IRP_MJ_WRITE中
判断目录路径然后直接拦截了。我测试后发现不能这样实现,论坛上的人告我将目录设置为只读
实际上是把目录下所有文件设置为只读,即有一目录C:\\Jason你想设置为只读,实际的操作是:
对于该目录下任一文件xx.xx,当该文件想进行写的时候,驱动会得到路径\\Jason\\xx.xx,此时
判断文件的父目录是不是\\Jason并拦截之,即可实现\\Jaosn\\xx.xx的只读控制。
到目前我实现就是使用这样的方法,是不是可以直接对目录进行拦截,我不知道。

有了这个概念,还需要一些技巧去实现。主要是在实现父目录匹配的字符串比较上。这个调
试一下就可以解决了。

3 禁止删除
禁止删除也还算简单,但是如果你象我一样是一个人瞎搞,也许不会知道这个方法。在此感谢
joshua_yu 告诉我这个方法。
在IRP_MJ_SET_INFORMATION中,
PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp);
irpSp->Parameters.SetFile.FileInformationClass == FileDispositionInformation
核心的就是判断irpSp->Parameters.SetFile.FileInformationClass 是不是等于
FileDispositionInformation
但是我一直很奇怪就是这些技术我怎么没有看到,而别人看的到?看的什么资料??


4 禁止创建文件
这里主要就是要区别一下新建文件和打开文件。对于这个过程,joshua_yu有他自己的理解:
“我是这样认为的:
当我们调用CreateFile并且希望创建一个文件的时候,系统会首先发送一个标志为FILE_OPEN的请求,并且判断底层文件系统的返回值,如果返回成功,则表明文件存在并且已经成功打开,否则如果返回结果是NO SUCH FILE,则紧接着创建一个FILE_OPEN_IF请求,得以将文件创建,所以如果我们在Create的Options当中发现了 FILE_CREATE,FILE_OPEN_IF和FILE_OVERWRITE_IF三个标志,则表明一定是在创建而不是打开。”

原理就是这样,代码实现我是这样做的:
CreateDisposition = (irpSp->Parameters.Create.Options>> 24) & 0x000000ff;
if(CreateDisposition==FILE_CREATE||CreateDisposition==FILE_OPEN_IF
||CreateDisposition==FILE_OVERWRITE_IF)
{
DbgPrint(\'It is a CREATE FILE operation\\n\');
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;
Irp->IoStatus.Information = 0;
status = Irp->IoStatus.Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return status;
}


5 一些其他问题:
由于这个是一点一点改好的,所以我能想到的主要技术就是这么多了。如果有问题,请和我交流
zhjie374@hotmail.com

顺便问个问题:移动设备动态插拔我怎么才能拦截到它的IRP?

6 最后还是要说一句: 本人毕业于排名300开外的大学,水平有限,有错误之处请各位批评指正。


精典的ASP精选TOP
· 利用ADODB.Stream 防盗链
· Adodb.Stream说明手册
· 采集需要登录
· ASP 判断远程图片是否存在
· 在ServerXMLHTTP组件中使用代理服务器
· 用XMLHTTP通过代理服务器从服务提取数据的一些问题
· objXML.readystate的值
· 互联网HTTP连接等出错代码大全
· 利用XMLHTTP实现的二级连动Select
· 利用 xmlhttp 分块上传文件
 
服务器安全点击TOP
· 新云最新漏洞总结篇
· 各类网站的默认数据库和密码
· Windows Server2003 防木马权限设置IIS服务器安全配置整理
· 针对ASP网站的Win 2003硬盘安全设置
· IIS 6 的PHP 最佳配置方法
· 利用SA.exe 将Iusr_victim克隆为Administrator
· Cmd模式下的入侵技术大全
· 破解网页代码加密
· SERV-U 6.4提权方法,通杀SERV-U版本
· 新云网站管理系统文件注入漏洞
 
硬设与组建点击TOP
· 从头到尾教你组建小型局域网20
· 从头到尾教你组建小型局域网19
· 从头到尾教你组建小型局域网18
· 从头到尾教你组建小型局域网17
· 从头到尾教你组建小型局域网16
· 从头到尾教你组建小型局域网15
· 从头到尾教你组建小型局域网14
· 从头到尾教你组建小型局域网13
· 从头到尾教你组建小型局域网12
· 从头到尾教你组建小型局域网11
 
病毒知识点击TOP
· 不再重装 手动清除顽固病毒AutoRUN
· 木马静态变动态 DLL木马程序大揭秘
· 详解一个很牛X的网马
· 一个网马
· Trojan-Downloader.Win32.Delf.bab
· 抓了一个AJAX的网马
· 迅雷5 最新0day利用程序
· 自动关掉270种杀毒软件
· RealPlayer 最新网马
· 五个反弹型后门的源代码
 
WINDOWS点击TOP
· 4【系统知识】常见文件扩展名及简要说明!!! ==超详尽==
· 3【系统知识】常见文件扩展名及简要说明!!! ==超详尽==
· 2【系统知识】常见文件扩展名及简要说明!!! ==超详尽==
· 1【系统知识】常见文件扩展名及简要说明!!! ==超详尽==
· Capture an HTML document as an image
· 如何给eWebEditor编辑器加上运行代码框功能
· 给CuteEditor5增加了高亮代码显示功能
· CuteEditor6.0使用配置心得体会
· 关于IE插件的CLSID问题
· 对开发的程序(制作CAB)进行签名,并允许网站中使用
  "凌风微型文章系统",针对"搜索引擎"完美设计,提高"搜索引擎"对网站容量,质量的评估值,"扁平化,转静态 ..."