阅读:1769回复:12
禁止一个目录下文件的写.
我现在想从文件过滤上禁止一个目录中的写入.
我拦截IRM_WRITE发现根本没有用. 我修改的SFILTER. 论坛上贴看了不少没有什么实质的. 谁能给我一个比较完整且效果良好的方案. 谢谢 [编辑 - 4/8/05 by zhjie374] |
|
最新喜欢:poweru... |
沙发#
发布于:2005-04-08 17:12
拦截IRP_MJ_CREATE啊,禁止所有该目录下的create操作,不是针对该目录本身
|
|
板凳#
发布于:2005-04-09 20:50
这个是比较简单的,首先禁止文件读写是可以的,那么禁止一个目录下的文件只是加了一个过滤条件而已。
|
|
|
地板#
发布于:2005-04-09 20:55
toolfat说得对,只要filter IRP_MJ_CREATE
|
|
|
地下室#
发布于:2005-04-11 09:30
这个方法看上去不错.我去测试一下
顺便问问:如果我想让USB盘或者移动硬盘成为只读.是什么样的思路? (从文件过滤上考虑,不使用设备过滤驱动) |
|
5楼#
发布于:2005-04-11 10:29
写入的时候,FILE_OBJECT->FLAGS 应该是什么?还是和这个参数没有关系??
我发现任何对文件的操作都要经过IRP_MJ_CREATE,那么在CREATE中如何能区分此次操作是写入呢? |
|
驱动老牛
|
6楼#
发布于:2005-04-11 13:11
写入的时候,FILE_OBJECT->FLAGS 应该是什么?还是和这个参数没有关系?? 就过了IRP_MJ_WRITE 就行,文件夹和文件在文件系统里都处于通一个空间内,物理上是独立的,要禁止文件写当然要禁止所有的文件写,而不是文件夹。 之要判断一下文件名就可以了 |
|
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\");执行.但是在该目录下新建东西还是成功了.. 为什么?? |
|
驱动老牛
|
8楼#
发布于:2005-04-11 17:38
if((wcscmp((&name)->Buffer,WRITEDIR))==0) [/quote] 晕,你这是比较目录中的文件么? 你得比较这个文件的父目录,而不是简单地比较它的目录名,说了文件和目录物理上没有太多的关系。 |
|
驱动老牛
|
9楼#
发布于:2005-04-11 17:42
比如你要禁止 c:\\\\test
你就得把所有的文件创建操作的父目录取出来,再和c;\\\\test比较 而不是直接和这个目录比较。 |
|
10楼#
发布于:2005-04-11 18:07
还不是很明白.
WRITEDIR是一个目录名.. 有SAMPLES吗? 本人纯学习,而且比较笨,各位见谅 |
|
驱动老牛
|
11楼#
发布于:2005-04-12 13:12
还不是很明白. ~~~~~~~~faint~~~~~~~~~~~~~ 白费劲 |
|
12楼#
发布于:2005-04-12 14:04
哎,新项目来了.这各要放放了.
老大别生气,我知道你的意思了. 就是如果我禁止C:\\\\TEST 那么当C:\\\\TEST下新建文件或者修改的时候去判断那个时候的路径名的父目录. 好的.我有空就继续 谢谢 |
|