首页
社区
课程
招聘
[翻译]文件过滤驱动中各种上下文的使用场景
发表于: 2021-5-13 19:59 11991

[翻译]文件过滤驱动中各种上下文的使用场景

2021-5-13 19:59
11991

0x1前言

一些名词的意思老是忘,干脆记个笔记。也锻炼下自己英语能力,大部分英语一行差不多能

 

看懂百分之70,希望以后能达到不用翻译无障碍阅读,感觉以后查资料都是看英文,

 

(吐槽一下,国内的资料重复度高不说,很多还搜不到)

 

本人英语水平一般,有错误欢迎指出

0x2 正文

首先,你需要理解上下文是一块内存数据,它和对象和你的过滤器相关联。

 

理论上你调用一个FltGetXXXContexts传入对象和关于你的过滤器的信息,然后你得到正确的上下文。

 

那么,什么类型的对象可以关联:

FLT_VOLUME_CONTEXT

 

这种上下文和"卷"关联,在物理介质的情况下,每个“物理”介质都有一个卷对象(以及卷上下文)
(例如 c:\ d:\等等)。在网络情况下,每个网络连接器都有一个

FLT_INSTANCE_CONTEXT

 

您可以安排对每个卷进行多次过滤,在这种情况下,每次你过滤卷,你得到一个新的实例

 

所以你可以关联一个实例上下文与它。

 

在大多数情况下,每个卷只有一个实例,

 

因此您可能会发现人们要么使用实例上下文,要么使用卷上下文。

FLT_FILE_CONTEXT

 

这种上下文与未关闭的文件相关联。只要任何人打开了一个文件,上下文就会一直存在。

 

如果程序打开一个文件30次,仍然只有一个文件上下文,请注意,由于缓存的工作方式,

 

文件上下文(以及流上下文和流句柄上下文)

 

可能会在最后一个应用程序关闭它的最后一个句柄后长时间挂起。

 

但它们不会永远持续下去。这是一个新的结构,你可能想要小心使用它之前,

 

因为一些文件系统可能不支持它,甚至在Vista和以前。

FLT_STREAM_CONTEXT

 

这种上下文与未关闭的流相关联,在NTFS中,一个文件可以有多个流

 

(c:\a和c:\a:other是文件a的两个流),如果应用程序打开一个流30次,仍然只有一个流上下文。

 

也就是说,一个文件可以有多个流(注意这是在NTFS中),一个流只有一个流上下文。

FLT_STREAMHANDLE_CONTEXT

 

它与一个打开流的specific实例相关联。具体来说,它与FileObject相关联,NT用来处理打开实例的数据结构

 

如果一个文件打开一个文件10次,,那么将有10个流处理上下文。

 

有一个与继承句柄有关的边缘情况,但您现在可以忽略它

 

请注意,

 

对于一个流上下文的流,可以存在许多流句柄上下文。

 

对于一个文件上下文的文件,可以存在同样多的流上下文(在ntfs一个文件可以有多个流)。

 

对于一个实例上下文的实例,可以存在许多文件上下文。

 

对于只有一个卷上下文的卷,可能存在许多实例上下文

 

因此,如果您愿意,就有一个与上下文类型相关联的粒度级别。

FLT_TRANSACTION_CONTEXT

 

这有点正交,因为事务与文件和卷是正交的(并且确实存在于文件系统之外)

 

当创建一个事务时,您将一个上下文与它关联起来

 

当你再次看到那个事务时,你就可以取回那个上下文。

 

OSR原文地址


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 377
活跃值: (5996)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
2

有没有驱动大佬解释解释FLT_TRANSACTION_CONTEXT,这个上下文的使用场景?其他的都看懂了,这个看的模糊

最后于 2021-5-14 14:43 被zx_838741编辑 ,原因:
2021-5-13 20:04
0
游客
登录 | 注册 方可回帖
返回
//