lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
阅读:3369回复:16

请问在minifilter中如何同步FltObjects->FileObject->FsContext

楼主#
更多 发布于:2007-10-22 07:43
请问各位大牛,在minifilter中没有DeviceObject,如何在MJ_CREATE中同步IRP来获取FltObjects->FileObject->FsContext,谢谢!
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
沙发#
发布于:2007-11-13 22:46
Re:请问在minifilter中如何同步FltObjects->FileObject->
StreamHandle和FileObject等价,加解密一般只需跟踪StreamHandle即可。
人总在矛盾中徘徊。。。
clarence
驱动牛犊
驱动牛犊
  • 注册日期2006-05-08
  • 最后登录2009-09-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望97点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-08 11:02
每一次文件操作都对应一个FileObject ?
一次文件操作的含义是什么?一次读写?还是别的。。。。

通过查询PCTX_STREAMHANDLE_CONTEXT 里面的内容就能得知这次访问的FileObject的状态,是需要加密还是需要解密还是不不要管?
自己可以在Context里面添加自己需要的标志位用来记录文件的加密信息。

不同的进程打开同一个文件的fileobject是不是一定都不一样?
相同的进程打开同一个文件的fileobject是不是一定都一样?
对于User Mode对应的是FileHandle,Kernel Mode对应的是FileObject。可能多个FileHandle对应一个FileObject。
所以,对于不同进程,FileObjec可能会是同一个。
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
地板#
发布于:2007-11-07 23:17
通过FsContext 可以知道哪个文件是不是被加密的文件,

Stream — This represents all opens across a single data stream of a file.
是不是可以理解为文件的一部分,它可以存在于磁盘中?缓存中?内存中?
如果对它做过点什么事情就可以在PCTX_STREAM_CONTEXT中记下来?
如果在缓存中,通过PCTX_STREAM_CONTEXT可以知道文件的一部分是不是已经被解密?

那么StreamHandle 又有什么用呢?在什么时候用呢?CTX_STREAMHANDLE_CONTEXT中又应该保存点什么呢?
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
地下室#
发布于:2007-11-07 22:31
•    File — This represents all opens across all data streams of a file. Currently these contexts are not supported.
•    Stream — This represents all opens across a single data stream of a file.
•    StreamHandle — This represents a single open of a file, i.e., a file object.
楚狂人教材翻译的是:
文件 - 指关于一个文件的所有打开的流。一般这些上下文是不支持的。 -- FsContext
流 - 文件上的一个单独的数据流。 -- PCTX_STREAM_CONTEXT
流句柄 - 一个文件的一次打开,比如一个文件对象。 -- PCTX_STREAMHANDLE_CONTEXT

对于FsContext 可以用来同步加密标记比较好理解,但是不知道PCTX_STREAM_CONTEXT和PCTX_STREAMHANDLE_CONTEXT有什么用处?

PCTX_STREAM_CONTEXT 用来记录文件被创建,清除,关闭的次数?当全部关闭时就清cache?数据流是不是就是cache中的文件内容?

PCTX_STREAMHANDLE_CONTEXT 又用来干什么的呢?和fastio有关系吗?
每一次文件操作都对应一个FileObject ?
通过查询PCTX_STREAMHANDLE_CONTEXT 里面的内容就能得知这次访问的FileObject的状态,是需要加密还是需要解密还是不不要管?
不同的进程打开同一个文件的fileobject是不是一定都不一样?
相同的进程打开同一个文件的fileobject是不是一定都一样?



//
//  Instance context data structure
//

typedef struct _CTX_INSTANCE_CONTEXT {

    //
    //  Instance for this context.
    //

    PFLT_INSTANCE Instance;

    //
    //  Volume associated with this instance.
    //

    PFLT_VOLUME Volume;

    //
    //  Name of the volume associated with this instance.
    //

    UNICODE_STRING VolumeName;

} CTX_INSTANCE_CONTEXT, *PCTX_INSTANCE_CONTEXT;

#define CTX_INSTANCE_CONTEXT_SIZE         sizeof( CTX_INSTANCE_CONTEXT )

//
//  Stream context data structure
//

typedef struct _CTX_STREAM_CONTEXT {

    //
    //  Name of the file associated with this context.
    //

    UNICODE_STRING FileName;

    //
    //  Number of times we saw a create on this stream
    //

    ULONG CreateCount;

    //
    //  Number of times we saw a cleanup on this stream
    //

    ULONG CleanupCount;

    //
    //  Number of times we saw a close on this stream
    //

    ULONG CloseCount;

    //
    //  Lock used to protect this context.
    //

    PERESOURCE Resource;

} CTX_STREAM_CONTEXT, *PCTX_STREAM_CONTEXT;

#define CTX_STREAM_CONTEXT_SIZE         sizeof( CTX_STREAM_CONTEXT )



//
//  Stream handle context data structure
//

typedef struct _CTX_STREAMHANDLE_CONTEXT {

    //
    //  Name of the file associated with this context.
    //

    UNICODE_STRING FileName;

    //
    //  Lock used to protect this context.
    //

    PERESOURCE Resource;

} CTX_STREAMHANDLE_CONTEXT, *PCTX_STREAMHANDLE_CONTEXT;

#define CTX_STREAMHANDLE_CONTEXT_SIZE         sizeof( CTX_STREAMHANDLE_CONTEXT )
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
5楼#
发布于:2007-10-29 09:13
Re:请问在minifilter中如何同步FltObjects->FileObject->
FLT_PREOP_SYNCHRONIZE
The minifilter driver is returning the I/O operation to the filter manager for further processing, but it is not completing the operation. In this case, the filter manager calls the minifilter's postoperation callback in the context of the current thread at IRQL <= APC_LEVEL.
人总在矛盾中徘徊。。。
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
6楼#
发布于:2007-10-26 16:53
资料方面就要看各位大牛们的奉献精神了!
clarence
驱动牛犊
驱动牛犊
  • 注册日期2006-05-08
  • 最后登录2009-09-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望97点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-10-26 15:55
光明程度上还好吧,怎么说也是ms现在大力推荐的,不过问题也有不少啊,起码一个,资料方面和filterdriver就没法比了~~
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
8楼#
发布于:2007-10-26 15:18
FsContext 后来仔细测试了一下在post中是同步的,
取文件名也没有什么问题,那么就可以移植代码到minifilter中了;

在CONTEXT如果可以对fastio中的fileobject也能做稳定安全的标记,
那么直接在fastio中进行加密解密也是有希望的;

minifilter本身对动态挂载,杀毒软件兼容性方面的优势

综合起来,这样minifilter做透明加密似乎是前途一片光明
clarence
驱动牛犊
驱动牛犊
  • 注册日期2006-05-08
  • 最后登录2009-09-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望97点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-10-26 12:39
楼上 : Create是异步处理的..........

同步的
abc13271552
驱动小牛
驱动小牛
  • 注册日期2007-08-13
  • 最后登录2023-12-05
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望552点
  • 贡献值0点
  • 好评度160点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2007-10-26 08:49
回 3楼(lsxredrain)的帖子
那个代码我没看过,不过, Create是异步处理的.你要用FsContext必须等待Create完成.
驱网无线,快乐无限
clarence
驱动牛犊
驱动牛犊
  • 注册日期2006-05-08
  • 最后登录2009-09-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望97点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-10-24 13:34
CONTEXT  是自己做的结构体,想存什么是自己决定的。
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
12楼#
发布于:2007-10-24 12:19
后来有测试了一下,IRP包是可以在post中取到值
请问用CONTEXT 能记录cache中的FileObject的状态信息?
clarence
驱动牛犊
驱动牛犊
  • 注册日期2006-05-08
  • 最后登录2009-09-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望97点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-10-24 10:26
在create 的post中打印出来的FSCONTEXT的值也是0  --  看看PostCreate中的iostatus是不是success。

Context是个好东西,不过就是要注意IRQL和reference counter
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
14楼#
发布于:2007-10-22 15:32
谢谢,我用minispy中的pre和post函数修改了一下,在create 的post中打印出来的FSCONTEXT的值也是0,不过在read和write中倒是对的,不知那里出问题了.
MINIFILTER提供的CONTEXT功能还没仔细看,得好好学习学习
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
15楼#
发布于:2007-10-22 08:52
还有如果来跟踪文件的话,不要用FSCONTEXT,而应该善用MINIFILTER提供的CONTEXT来处理,功能相当强大,而且稳定安全。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
16楼#
发布于:2007-10-22 08:46
minifilter中CREATE本身就已经是同步处理了,所以在CREATE 的POST处理里直接获得即可 。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
游客

返回顶部