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直播授课