wzhe2000
驱动牛犊
驱动牛犊
  • 注册日期2002-03-23
  • 最后登录2002-10-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2917回复:19

在filemon中实现对文件的保护(讨论)

楼主#
更多 发布于:2002-05-14 11:12
我想在filemon中实现对文件的保护,所以在filemonHookRoutine
检查文件名,如果是希望的文件名,则调用IoCompleteRequest,并
返回success,大侠看看这个思路有什么问题,为什么我在使用时
总得不到预期效果?谢了。。。

最新喜欢:

simonlausimonl...
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-14 11:53
你只要拦截IRP_MJ_CREATE就可以了,处理是
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
Irp->IoStatus.Information = 0;
IoCompleteRequest( Irp,IO_NO_INCREMENT);
return STATUS_INVALID_DEVICE_REQUEST;
wzhe2000
驱动牛犊
驱动牛犊
  • 注册日期2002-03-23
  • 最后登录2002-10-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-15 09:17
我加了下面的代码进去,请帮忙看看,假设我要保护的文件是1。txt怎么加载了驱动后,仍然能够打开这个文件呢?

if(strcmp(fullPathName,\"d:\\\\1.txt\")==0)
{
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
Irp->IoStatus.Information = 0;
IoCompleteRequest( Irp,IO_NO_INCREMENT);
return STATUS_INVALID_DEVICE_REQUEST;  
}
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-15 10:11
我不知道你的fullPathName是怎么取得的
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-15 10:14
你要看清楚fullPathName里面的内容格式,估计就是这个格式的问题啊!可能里面包含了文件名,可是可能还包含了别的内容导致不一样,还有就是大小写的问题,这些你都考虑了吗?
wzhe2000
驱动牛犊
驱动牛犊
  • 注册日期2002-03-23
  • 最后登录2002-10-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-05-17 09:46
还有一个问题:我在硬件管理器里将该filemon设备停止后,每次重新加载编译后的驱动时,总是使用几分钟后突然重启,这是怎么回事有什么解决办法吗?
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-05-17 12:45
那是因为你驱动程序的问题了,为什么会出现一段时间之后才突然重起是因为开始的那段时间没有运行到导致重起的代码
skylgl
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分71分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-05-17 20:40
这个东东我曾经研究过的,有些体会,如果我认为的没有错,就是你的文件名字取的有问题,在内核模式下的那个文件的名字是一个结构,调用处理这个结构的是一个转有的函数,而比较他们的是另一个函数,这样的东西在国外有过FILEMON的讨论中都有的,如果你的驱动程序无法正常的结束,那么是会影响你的核心的!!
wzhe2000
驱动牛犊
驱动牛犊
  • 注册日期2002-03-23
  • 最后登录2002-10-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-05-18 12:47
对于非即插即用的驱动程序来说,在设管理器中随意的停止和启用,并在停止的时候对驱动程序进行更新,然后再启用,这样允许吗?
会不会造成内核工作的不稳定?
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-05-19 00:35
可以的,只要你保证申请的资源都释放了!要停止的驱动没有正在等待处理的请求就可以!
wzhe2000
驱动牛犊
驱动牛犊
  • 注册日期2002-03-23
  • 最后登录2002-10-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-05-19 13:52
    但对于我现在的这个驱动程序(就是以filemon为基础的一个文件过滤程序),当我做了修改并重新编译通过后,再次加载时,它总是显示加载的仍然是原来未作修改时的那个版本,我只有在设备管理器中将这个驱动卸载,但此时计算机提示要重新启动。我不理会,继续再次加载驱动,这是显示的就是新版本的驱动程序,但工作几分钟甚至刚加载计算机就会重启;如果不卸载,只是连按两下停止设备,重新加载驱动,显示的也是新版本的驱动程序,但问题依旧.似乎必须重启一下计算机才能更换驱动,这怎么解释啊?
    
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-05-19 16:13
那是因为驱动程序的问题了!FILEMON的源代码我也有也看了,是有问题的!你必须把其中的一部分修改了才可以正常运行!
wzhe2000
驱动牛犊
驱动牛犊
  • 注册日期2002-03-23
  • 最后登录2002-10-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-05-19 19:58
原来是这样,那你能告诉我应该在哪里该如何修改呢?还有可不可以告诉我几个关于filemon讨论或者文件驱动讨论的论坛呢?
谢了,专家,呵呵!
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-05-20 13:30
说起来就比较麻烦了!还是你自己研究吧
horsedo
驱动小牛
驱动小牛
  • 注册日期2001-11-29
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2002-06-26 15:50
这个东东我曾经研究过的,有些体会,如果我认为的没有错,就是你的文件名字取的有问题,在内核模式下的那个文件的名字是一个结构,调用处理这个结构的是一个转有的函数,而比较他们的是另一个函数,这样的东西在国外有过FILEMON的讨论中都有的,如果你的驱动程序无法正常的结束,那么是会影响你的核心的!!

大侠可否具体讲讲这个结构的用法,这个函数是哪个?
谢谢!
devil_jie
驱动牛犊
驱动牛犊
  • 注册日期2002-08-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-08-21 23:19
guardee谢谢你,你的回答解决了我的问题。另外wzhe2000你要保护文件1.txt可以用以下代码:
KeEnterCriticalRegion();
ExAcquireResourceSharedLite( &FilterResource, TRUE );
if(MatchWithPattern( \"*E:\\\\A.TXT*\", fullPathName))
{
ExReleaseResourceLite( &FilterResource );
KeLeaveCriticalRegion();

Irp->IoStatus.Status=STATUS_INVALID_DEVICE_REQUEST;
Irp->IoStatus.Information=0;
IoCompleteRequest(Irp,IO_NO_INCREMENT);
return STATUS_INVALID_DEVICE_REQUEST;

}
ExReleaseResourceLite( &FilterResource );
KeLeaveCriticalRegion();
这几个函数都是filemon下定义的。

soliseaman
驱动牛犊
驱动牛犊
  • 注册日期2002-07-02
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
16楼#
发布于:2002-08-25 17:43
能否给一份filemon源码给我?
soliseaman@sina.com
谢谢了! :)
wangwolue1
驱动牛犊
驱动牛犊
  • 注册日期2002-10-19
  • 最后登录2008-11-26
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-11-07 19:12
如果用户把1.txt改名后再删除这种方法就不行了.
ss
birdtomaster
驱动牛犊
驱动牛犊
  • 注册日期2003-10-03
  • 最后登录2008-09-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-07-16 23:20
guardee谢谢你,你的回答解决了我的问题。另外wzhe2000你要保护文件1.txt可以用以下代码:
KeEnterCriticalRegion();
ExAcquireResourceSharedLite( &FilterResource, TRUE );
if(MatchWithPattern( "*E:\\A.TXT*", fullPathName))
{
ExReleaseResourceLite( &FilterResource );
KeLeaveCriticalRegion();

Irp->IoStatus.Status=STATUS_INVALID_DEVICE_REQUEST;
Irp->IoStatus.Information=0;
IoCompleteRequest(Irp,IO_NO_INCREMENT);
return STATUS_INVALID_DEVICE_REQUEST;

}
ExReleaseResourceLite( &FilterResource );
KeLeaveCriticalRegion();
这几个函数都是filemon下定义的。

 


我还有一个问题:用这些代码的确能实现过滤对改文件的所有操作,但是却有以下两点需要解决:
1、一旦对受到过滤的文件进行了任何操作,那么改文件所在的分区所有目录都不能访问,直到卸载驱动
2、有时候需要允许读而不允许写,这样好像不行,如果可读不可写改如何改,在IRP_MJ_WRITE中加入这些代码是要死机的,但是只加入Irp->IoStatus.Status=STATUS_INVALID_DEVICE_REQUEST;
Irp->IoStatus.Information=0;
IoCompleteRequest(Irp,IO_NO_INCREMENT);
return STATUS_INVALID_DEVICE_REQUEST;
不会死机,却会有一大堆不能去除的错误提示
and_ok
驱动牛犊
驱动牛犊
  • 注册日期2004-10-12
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分270分
  • 威望27点
  • 贡献值0点
  • 好评度27点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2007-07-31 00:15
fullPathName的取得请用FilemonGetFullPath(...)
游客

返回顶部