关于 Windows NT MiniFilter 驱动程序,"context" 有什么用?

What is a "context" used for in regards to a Windows NT MiniFilter Driver?

作为微过滤器课程的一部分,我构建了一个非常简单的微过滤器驱动程序。我还阅读了 minifilter 文档 that Microsoft provides which is in the form of a PDF doc, as well as this reference。这些指南解释了如何设置上下文和实例。但是,它们没有解释 为什么要使用上下文 and/or 实例以及它们的用途 。我的非常小的过滤器驱动程序对上下文和实例都使用了 NULL,并且仍在运行,所以我想知道这些构造的用例。

您想要为文件、卷等使用上下文的原因有很多。当然,过滤器甚至 file-systems 都可以在没有它们的情况下运行,但性能会非常糟糕。

想象一下这个场景:你是一个 AV (AntiVirus) 并且想要扫描一些文件以检查它们是否包含恶意代码。 你注册了你的 minifilter 和回调,现在你被调用了,你需要在文件打开时做出决定。

涉及几个步骤:

  1. 您查询文件名和安全上下文
  2. 您阅读了文件内容
  3. 或者使用 SHA256 对文件进行哈希处理,以查看它是否与您的 AV 数据库匹配
  4. 您检查文件是否经过数字签名,这也是您检查的一部分
  5. 你解析文件的 PE header 如果它有一个,看看它是什么类型的文件或可执行文件,以帮助你做出决定
  6. 您根据以上所有信息对文件应用您的政策

现在假设文件是​​干净的并且消失了。如果您无法记住刚刚了解的有关该文件的信息,则下次打开该文件时,您将不得不 re-do 重新开始。你的表现会很糟糕,你的 OS 会崩溃并慢慢燃烧到地面。

这就是上下文派上用场的地方。

既然您已经拥有关于该文件的所有这些信息,您可以将所有这些信息存储在您的上下文中,然后与该文件相关联。下次您看到该文件时,您只需查询其上下文并获得所需的所有信息。

当然有些东西需要更新,例如,如果您注意到文件已被更改,那么您将其标记为脏并在下一个创建或清理回调中根据需要进行更新。

或者你可以使用缓存,在文件永久关闭后微过滤器想要释放你与文件关联的上下文,你可以自己保存它。 现在,下次打开文件时,您会查找文件的上下文(NTFS 支持文件的唯一文件 ID)并将其与您的文件相关联,并立即了解您需要了解的有关该文件的所有信息

这只是一种用法,但现在您可以自己想出更多它们有用的场景。