【问题标题】:What is the difference between a WDM driver, a KMDF driver and a UMDF driver?WDM 驱动程序、KMDF 驱动程序和 UMDF 驱动程序有什么区别?
【发布时间】:2013-05-15 15:45:29
【问题描述】:

在 Visual Studio 2012 中创建 Windows 驱动程序项目时,您有许多不同的选项可供选择。

page on MSDN 可以帮助您为您的设备选择正确的驱动程序型号。然而,它并没有清楚地解释 WDM、KMDF 和 UMDF 驱动程序类型之间的确切区别,以及何时选择哪种模型。

我正在寻找关于 WDM、KMDF 和 UMDF 驱动程序模型之间差异的解释,因此 Windows 驱动程序开发新手可以轻松选择正确的模型。

【问题讨论】:

    标签: windows wdm kmdf wdf umdf


    【解决方案1】:

    简而言之:

    • WDM 代表 Windows 驱动程序模型。每个内核驱动程序本质上都是一个 WDM 驱动程序。
    • KMDF 代表内核模式驱动程序框架。这是一个框架,它封装并隐藏了驱动程序开发人员必须涉及的许多 OS 编程方面,即使它与他的驱动程序的业务逻辑无关。某些功能在 KMDF 框架中不存在,需要在不使用框架的情况下调用本地内核(但在大多数情况下并非如此)。
    • UMDF 代表用户模式驱动程序框架。它是 KMDF 的补充框架,它们共同构成 WDF(Windows 驱动程序框架)。 UMDF 允许在用户模式下创建驱动程序,具有用户模式编程与内核模式的所有优点。与 KMDF/WDM 驱动程序相比,UMDF 驱动程序自然存在局限性,并且在大多数情况下,它需要至少具有某些功能的内核对应项。

    您引用的页面非常全面。您应该深入了解它以进行更深入的了解。

    【讨论】:

    • 感谢您的解释,但我还没有完全弄清楚一件事。你说每个内核驱动都是WDM驱动,但是所有WDM驱动都是内核驱动吗?为什么在VS2012中WDM和KMDF是两个不同的模板?
    • @lesderid 从 Win32 和 MFC 的角度来考虑它(我希望你熟悉这两者)。虽然每个 MFC 程序都是 Win32 程序,但并非每个 Win32 程序都是 MFC 程序。 KMDF 类似于 MFC:一个可以用来隐藏 WDM 的一些复杂性的框架。因此,模板之所以不同,是因为它们生成的内容不同:一个生成一种项目,另一个生成另一种。要回答您的另一个问题,所有现代 kernel 驱动程序都是 WDM 驱动程序;尽管还有其他“遗留”内核驱动程序模型,但它们不受官方支持,不应再使用。
    • 在大多数情况下,您不需要内核模式驱动程序。
    【解决方案2】:

    我喜欢来自 MSDN 的文章:Differences Between WDM and KMDF

    • WDM 是自 pnp 设备驱动程序 (>=Win2k) 以来的驱动程序模型。在此模型中,您必须处理与您的功能无关的功能。 Walter Oney(Microsoft Windows 驱动程序模型编程)将此类功能外包给外部设备驱动程序库以供重用。

    • WDF/kmdf 试图简化设备驱动程序的开发。可以覆盖函数或使用默认处理程序。内存和队列的管理已大大简化和安全。

    • UMDF 尝试在用户模式中使用与内核模式中的函数调用类似的函数调用。

    希望不会太晚。我写完后第一次看到的问题日期!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 2018-06-20
      相关资源
      最近更新 更多