sys_ck
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2003-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3739回复:32

有关Filemon

楼主#
更多 发布于:2003-04-11 14:04
在Filemon源码中有这样一个结构体
//
// Structure for the fileobject/name hash table
//
typedef struct _nameentry {
   PFILE_OBJECT FileObject;
   struct _nameentry *Next;
   CHAR FullPathName[];
} HASH_ENTRY, *PHASH_ENTRY;
它有什么作用》?

另外代码中的H A S H   T A B L E   M A N A G E M E N T
包含的函数FilemonHashCleanup、FilemonFreeHashEntry
有何作用?

如果不用这些,会有什么影响吗?

请各位大侠指点!
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-11 15:44
HASH_ENTRY是用来缓冲一些最近访问的文件,这样对于最近访问的文件,就不需要频繁的访问lower driver来得到文件名,提高效率。
可以看一下FilemonGetFullPath函数。
回答满意不,给分啊!
不限容量的免费邮箱 www.k65.net
sys_ck
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2003-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-11 16:07
谢谢!
不过我不知道怎么给分啊
待我看看,:)

再问一个问题,
PATH AND PROCESS MANAGEMENT这部分的具体作用?不用这里面的函数有什么影响吗?

还有
如果直接去掉fast io部分,会对程序有影响吗?
(因为刚入门,对fast io还不了解)
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-11 18:29
我倒了。PATH AND PROCESS MANAGEMENT这一部分是处理文件名的,没有这部分,filemon有什么作用,罚你看三天源代码再来问。
不限容量的免费邮箱 www.k65.net
sys_ck
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2003-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-04-11 19:26
哎!已经看了两天的源代码了
还有一堆的问题
还请高手多多指点啊

再问一次,
如果直接去掉fast io部分,会对程序有影响吗?
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-16 11:44
FilemonFastIoDeviceControl
最为重要,其余的你试试看去掉。
fastio是和cach打交道的。可以提高访问文件的效率。
不限容量的免费邮箱 www.k65.net
sys_ck
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2003-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-04-16 12:07
3x!
我试过了,正像你说的,
除了FastIoDeviceControl不能去,其他的去掉不会有影响(当然只是从外部看)

fastio与cache打交道,在源码中,cache就是hash table吗?
NTSTATUS
FilemonDispatch(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
{
    //
    // Determine if its a request from the GUI to us, or one that is
    // directed at a file system driver that we\'ve hooked
    //
    if( ((PHOOK_EXTENSION) DeviceObject->DeviceExtension)->Type == GUIINTERFACE ) {

        return FilemonDeviceRoutine( DeviceObject, Irp );

    } else {

        return FilemonHookRoutine( DeviceObject, Irp );
    }
}
这部分一直不是很明白,总觉得FilemonDeviceRoutine和FilemonHookRoutine应该换一个位置,能解释一下吗?
谢谢!给分了
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-04-16 17:27
给你一段看看,关于fastio的
Q13 Must I support Fast I/O in my file system or filter, and where is Fast I/O documented?

 
    Fast I/O is optional for a file system. For a file system filter driver, it is required if any file system it filters supports fast I/O. Because all of the standard Windows NT/2000/XP file systems support fast I/O, essentially it is required of all filter drivers.

Fast I/O is a mechanism that was introduced into Windows NT in order to optimize the handling of certain I/O operations. In addition, fast I/O routines are also used for a variety of communications channels between the FSD and various kernel components, including the I/O Manager, the File System Runtime Library, and the CIFS File Server. Unfortunately, at the present time Fast I/O is not documented, although future versions of the IFS Kit will include documentation on how the Fast I/O routines are used.
 
hash table是用来缓冲文件名的,又说一次。

看看注释:
//
// Determine if its a request from the GUI to us, or one that is
// directed at a file system driver that we\'ve hooked
//

这下:
这部分一直不是很明白,总觉得FilemonDeviceRoutine和FilemonHookRoutine应该换一个位置,能解释一下吗?
谢谢!给分了

该懂了吧。

不限容量的免费邮箱 www.k65.net
sys_ck
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2003-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-04-17 12:00
明白了!
:)

代码中的HookDriver和FilemonHookRoutine两个函数的作用有什么不同呢?
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-04-17 12:42
hookdrive是用来挂接c: d: 等盘符的。这样FilemonHookRoutine就可以截获所有的文件访问了。自己把源码看熟了。
不限容量的免费邮箱 www.k65.net
sys_ck
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2003-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-04-19 16:08
修改了源代码DbgPrint()中的内容,为什么每次运行后
在DbgView中还是显示原来的内容?
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-04-21 09:25
呼呼,这下回答不了了,我还没有用过dbgview,调试时用的是softice。要学习!
不限容量的免费邮箱 www.k65.net
sys_ck
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2003-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-04-21 12:37
还是很感谢你,给了我很多启发。
 :)
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-04-21 16:49
哪儿有源码?谢谢!
你的认可是对我最大的鼓励!
sys_ck
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2003-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-04-22 11:52
在IFS中,Types of I/O Requests That Are Sent to a Volume和Types of I/O Requests That Are Sent to a File System有很大的差别;反映在源码中,filemondeviceroutine中用的是Types of I/O Requests That Are Sent to a File System,而在filemonhookroutine中用的是Types of I/O Requests That Are Sent to a Volume
能不能帮忙解释一下?
感激不尽!!!
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-04-22 15:06
是这样的么,你好好看看。
不限容量的免费邮箱 www.k65.net
sys_ck
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2003-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-04-22 16:47
难道我看错了?没有啊,的确是这样的,除了个别的。

另外,我想在IRP_MJ_CREATE时,通知应用程序,弹出身份验证的对话框,我是这样想的:先建立一个事件,让它在驱动部分挂起,
在FilemonHookRoutine中的
case IRP_MJ_CREATE:下,添加了如下代码:

KeSetEvent(Irp->UserEvent,2,FALSE);
Irp->IoStatus.Status=STATUS_PENDING;
Irp->IoStatus.Information=0;
IoMarkIrpPending(Irp);
hookExt->CreateIrp=Irp;
return STATUS_PENDING;
并且把LogRecord屏蔽了,

但是好像不起作用阿,在filemon中仍然能看到IRP_MJ_CREATE请求
MacWin
驱动中牛
驱动中牛
  • 注册日期2002-12-16
  • 最后登录2009-05-27
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望44点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-04-22 17:42
TO nustzhua : 佩服 !
Chen
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-04-22 18:06
难道我看错了?没有啊,的确是这样的,除了个别的。

另外,我想在IRP_MJ_CREATE时,通知应用程序,弹出身份验证的对话框,我是这样想的:先建立一个事件,让它在驱动部分挂起,

 


呼呼,现在看来你不只是学来玩一玩了。下面是一些建议:
把事件的同步的处理好好研究研究;
不要害怕挫折。
其实你这样做也没有多大意义,在ntfs文件系统中有了安全特性,可以限制一个文件(目录)可以被那些用户使用。\"想在IRP_MJ_CREATE时,通知应用程序,弹出身份验证的对话框\"无非也就要达到这样的目的。
忘了说这个功能以前我也想去实现,但自从我知道了ntfs的安全特性之后,就没有这个想法了。:)
祝你好运!
不限容量的免费邮箱 www.k65.net
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-04-22 18:07
TO nustzhua : 佩服 !

不用这么夸奖吧,呼呼。
不限容量的免费邮箱 www.k65.net
上一页
游客

返回顶部