【问题标题】:Is it possible or a common technique to sandbox kernel mode drivers?沙盒内核模式驱动程序是否可能或常用技术?
【发布时间】:2013-06-12 03:37:32
【问题描述】:

我发现内核模式驱动程序在特权模式下运行时存在风险,但是是否有任何单片内核可以执行任何形式的驱动程序/可加载模块沙盒,或者这真的是微内核的领域吗?

【问题讨论】:

    标签: operating-system kernel device-driver


    【解决方案1】:

    是的,有些平台具有“单片”(对于单片的某些定义)内核,可以为某些驱动程序执行驱动程序沙盒。 Windows 在最新版本中使用用户模式驱动程序框架执行此操作。这样做有两个原因:-

    1. 它允许隔离。用户模式驱动程序中的故障不需要关闭整个系统。这对于不被认为是系统关键的硬件驱动程序很重要。这方面的一个例子可能是您的打印机或声卡。在这种情况下,如果驱动程序出现故障,通常可以简单地重新启动它,而用户通常甚至不会注意到发生了这种情况。
    2. 它使编写和调试驱动程序变得更加容易。驱动程序编写者可以使用常规用户模式库和常规用户模式调试器,而无需担心 IRQL 和 DPC 等问题。

    另一位发帖人说这没有意义。希望以上内容解释了您可能想要这样做的原因。此外,另一位发帖人说他们是性能问题。同样,这取决于驱动程序的类型。在 Windows 中,这通常用于 USB 驱动程序。在 USB 驱动程序的情况下,无论驱动程序在何种模式下运行,驱动程序都不会直接与硬件直接对话 - 它们正在与正在与 USB 主机控制器对话的另一个驱动程序对话,因此开销要少得多如果您编写的驱动程序必须在用户模式下对 IO 端口进行 bit bang 操作,那么用户模式通信将不会如此。此外,您将避免为对性能至关重要的硬件编写用户模式驱动程序 - 在打印机和音频硬件的情况下,用户模式转换比硬件本身快得多,以至于一两个额外模式上下文切换的性能成本可能无关紧要。

    因此,有时值得这样做只是因为额外的健壮性和易于开发使得小的且通常不明显的性能降低是值得的。

    【讨论】:

    • 我认为我们谈论的是内核模式驱动程序)。并且可以用 UMDF 编写非常小的驱动程序组(如果你想要一些选项,比如我记得的并发访问,你也不能切换到 UMDF)。
    • UMDF 可以做的事情肯定是有限制的,但这只是 UMDF 的一个功能,它还不是一个完整的技术——他们为你想要转移给用户的东西提供了支持首先是模式,例如并发访问不成问题的打印机驱动程序。该问题并未专门询问内核模式驱动程序。
    【解决方案2】:

    这种沙盒没有任何意义,操作系统完全信任驱动程序代码。基本上这个驱动程序成为内核的一部分。在 FS 崩溃或内核的任何主要子系统后,您无法进行故障转移。基本上它是坏的(崩溃后的故障转移,想象一下你可以在启动盘的存储驱动程序崩溃之后做些什么?),因为可能导致数据丢失。 其次 - 沙盒会导致所有内核代码的性能受到影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      相关资源
      最近更新 更多