WDM驱动程序,KMDF驱动程序和UMDF驱动程序有什么区别?

les*_*rid 9 windows kmdf wdf wdm umdf

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

MSDN上有一个页面可帮助您为设备选择正确的驱动程序模型.但是,它没有清楚地解释WDM,KMDF和UMDF驱动程序类型之间的确切差异,以及何时选择哪个模型.

我正在寻找有关WDM,KMDF和UMDF驱动程序模型之间差异的解释,因此开始Windows驱动程序开发人员很容易选择正确的模型.

Som*_*ame 14

简而言之:

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

您引用的页面非常全面.你应该深入了解它,以便更深入地理解.

  • @lesderid从Win32和MFC的角度来考虑它(我希望你们都熟悉它们).虽然每个MFC程序都是Win32程序,但并非每个Win32程序都是MFC程序.KMDF类似于MFC:一个框架,可用于隐藏WDM的一些复杂性.因此,模板的不同之处在于它们生成的内容不同:一个生成一种项目,另一种生成另一种.要回答你的另一个问题,所有现代*内核*驱动程序都是WDM驱动程序; 虽然还有其他"遗留"内核驱动程序模型,但它们不受官方支持,不应再使用. (4认同)

til*_*lli 6

我喜欢来自MSDN的语言:WDM和KMDF之间的差异

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

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

  • UMDF尝试在用户模式下使用类似的函数调用作为内核模式下的函数调用.

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

  • KMDF + UMDF = WDF (3认同)