zhjie374
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2012-01-17
  • 粉丝2
  • 关注1
  • 积分17分
  • 威望144点
  • 贡献值1点
  • 好评度21点
  • 原创分0分
  • 专家分0分
阅读:1769回复:12

禁止一个目录下文件的写.

楼主#
更多 发布于:2005-04-08 16:07
我现在想从文件过滤上禁止一个目录中的写入.

我拦截IRM_WRITE发现根本没有用.

我修改的SFILTER.

论坛上贴看了不少没有什么实质的.

谁能给我一个比较完整且效果良好的方案.

谢谢

[编辑 -  4/8/05 by  zhjie374]

最新喜欢:

poweruserpoweru...
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-08 17:12
拦截IRP_MJ_CREATE啊,禁止所有该目录下的create操作,不是针对该目录本身
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-04-09 20:50
这个是比较简单的,首先禁止文件读写是可以的,那么禁止一个目录下的文件只是加了一个过滤条件而已。
不限容量的免费邮箱 www.k65.net
paladinii
驱动中牛
驱动中牛
  • 注册日期2003-10-28
  • 最后登录2012-03-09
  • 粉丝0
  • 关注0
  • 积分282分
  • 威望74点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-04-09 20:55
toolfat说得对,只要filter IRP_MJ_CREATE
Ideas for life!
zhjie374
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2012-01-17
  • 粉丝2
  • 关注1
  • 积分17分
  • 威望144点
  • 贡献值1点
  • 好评度21点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-04-11 09:30
这个方法看上去不错.我去测试一下

顺便问问:如果我想让USB盘或者移动硬盘成为只读.是什么样的思路?
 (从文件过滤上考虑,不使用设备过滤驱动)
zhjie374
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2012-01-17
  • 粉丝2
  • 关注1
  • 积分17分
  • 威望144点
  • 贡献值1点
  • 好评度21点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-04-11 10:29
写入的时候,FILE_OBJECT->FLAGS 应该是什么?还是和这个参数没有关系??

我发现任何对文件的操作都要经过IRP_MJ_CREATE,那么在CREATE中如何能区分此次操作是写入呢?
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2005-04-11 13:11
写入的时候,FILE_OBJECT->FLAGS 应该是什么?还是和这个参数没有关系??

我发现任何对文件的操作都要经过IRP_MJ_CREATE,那么在CREATE中如何能区分此次操作是写入呢?


就过了IRP_MJ_WRITE 就行,文件夹和文件在文件系统里都处于通一个空间内,物理上是独立的,要禁止文件写当然要禁止所有的文件写,而不是文件夹。
之要判断一下文件名就可以了
---内核开发合作或提供基础技术服务QQ:22863668 ---
zhjie374
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2012-01-17
  • 粉丝2
  • 关注1
  • 积分17分
  • 威望144点
  • 贡献值1点
  • 好评度21点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-04-11 13:39
我在IRP_MJ_CREATE判断路径然后拦截,拦截代码如下:
if(file)
{
if( file->FileName.Buffer)
{
RtlCopyUnicodeString(&name,&file->FileName);
if((wcscmp((&name)->Buffer,WRITEDIR))==0)
{
DbgPrint(\"MATCHING LOCK IT\");
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;
Irp->IoStatus.Information = 0;
status = Irp->IoStatus.Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return status;
}
}
}
从DBGVIEWER中已经看到路径是匹配了,即DbgPrint(\"MATCHING LOCK IT\");执行.但是在该目录下新建东西还是成功了..
为什么??
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2005-04-11 17:38

if((wcscmp((&name)->Buffer,WRITEDIR))==0)
 [/quote]
晕,你这是比较目录中的文件么?
你得比较这个文件的父目录,而不是简单地比较它的目录名,说了文件和目录物理上没有太多的关系。
---内核开发合作或提供基础技术服务QQ:22863668 ---
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2005-04-11 17:42
比如你要禁止 c:\\\\test
你就得把所有的文件创建操作的父目录取出来,再和c;\\\\test比较
而不是直接和这个目录比较。
---内核开发合作或提供基础技术服务QQ:22863668 ---
zhjie374
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2012-01-17
  • 粉丝2
  • 关注1
  • 积分17分
  • 威望144点
  • 贡献值1点
  • 好评度21点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-04-11 18:07
还不是很明白.
WRITEDIR是一个目录名..

有SAMPLES吗?

本人纯学习,而且比较笨,各位见谅
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2005-04-12 13:12
还不是很明白.
WRITEDIR是一个目录名..

有SAMPLES吗?

本人纯学习,而且比较笨,各位见谅

~~~~~~~~faint~~~~~~~~~~~~~
白费劲
---内核开发合作或提供基础技术服务QQ:22863668 ---
zhjie374
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2012-01-17
  • 粉丝2
  • 关注1
  • 积分17分
  • 威望144点
  • 贡献值1点
  • 好评度21点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-04-12 14:04
哎,新项目来了.这各要放放了.

老大别生气,我知道你的意思了.

就是如果我禁止C:\\\\TEST 那么当C:\\\\TEST下新建文件或者修改的时候去判断那个时候的路径名的父目录.

好的.我有空就继续

谢谢
游客

返回顶部