我制作了一个非常简单的minifilter驱动程序,作为微过滤器课程的一部分。我还阅读了PDF文档形式的minifilter文档that Microsoft provides以及this reference。这些指南介绍了如何设置上下文和实例。但是,他们没有解释为什么会使用上下文和/或实例以及它们的用途。我的非常小的过滤器驱动程序对上下文和实例都使用NULL并且仍在运行,因此我想知道这些构造的用例。
答案 0 :(得分:1)
有很多原因可以让你想要为文件,卷等使用上下文。当然,过滤器甚至文件系统都可以在没有它们的情况下运行,但性能会非常糟糕。
想象一下这种情况:您是AV(AntiVirus)并且想要扫描一些文件以检查它们是否包含恶意代码。 你注册你的minifilter和回调,现在你被调用,你需要在文件打开时做出决定。
涉及以下几个步骤:
现在让我们假设文件干净并且消失了。如果您无法保留刚刚获悉的有关该文件的信息,则下次打开该文件时,您将不得不重新进行重新操作。你的表现会很糟糕,你的操作系统会崩溃并慢慢燃烧到地面。
这就是上下文派上用场的地方。
现在您已拥有有关该文件的所有信息,您可以将所有这些信息存储在与此文件关联的上下文中。下次您看到该文件时,您只需查询其上下文并获得所需的所有信息。
当然有些事情需要更新,例如,如果您注意到文件已被更改,那么您将其标记为脏并在下一个Create或Cleanup回调中根据需要进行更新。
或者你可以使用缓存,在文件关闭之后,minifilter想要释放你与文件关联的上下文,你可以自己保存它。 现在,下次打开文件时,您将查找文件的上下文(NTFS支持文件的唯一文件ID),并将其与您的文件关联,并立即了解您需要了解的有关该文件的所有信息
这只是一种用法,但现在您可以自己考虑更多有用的场景。