【问题标题】:Why is there no WDM kernel-mode driver template in Windows Driver Kit?为什么 Windows Driver Kit 中没有 WDM 内核模式驱动程序模板?
【发布时间】:2014-07-23 20:44:17
【问题描述】:

我遇到过很少经验的内核模式驱动程序。这是我想要做的:

  • 拥有一个加载驱动程序的用户模式应用程序。
  • 让用户模式应用程序对其进行写入,以便向其发送指令。
  • 让驱动程序将 RDMSR 指令发送到 Intel 芯片。
  • 将结果返回给用户模式应用程序。

我已阅读 this article,其中描述了您可以实现此行为的不同方式(缓冲 I/O、直接 I/O 或两者都不是)。

我的问题是……这篇文章的代码代表了您构建 WDM 驱动程序的方式,我希望能够使用 Windows 驱动程序创建 WDM KMDF 项目模板Kit,但是当我下载 Windows Driver Kit (WDK) 时,唯一的 KMDF 驱动程序模板是用于 WDF 驱动程序的。 MSDN has an article describing the differences between the two。这对我来说有点奇怪。我期望得到一个开箱即用的模板,我可以修改它以像我链接的文章中那样工作,但我没有看到它。为什么没有 WDM KMDF 驱动的模板?

只是一个补充说明,您可以很容易地根据way it creates the device 判断驱动程序的类型(IoCreateDevice 表示 WDM,而 WdfDeviceCreate 表示 WDF)。

【问题讨论】:

    标签: c visual-c++ wdk kmdf wdf


    【解决方案1】:

    这个问题有很多不一致之处。首先,KMDFWDF 的一个子集(在谈论内核驱动程序时,它是唯一相关的WDF 部分),因此两者之间没有矛盾。每个内核驱动程序本质上都是一个WDM 驱动程序。 KMDFWDMKMDF 驱动程序中的一个框架,通常称为KMDF 驱动程序,而无需提及WDMWDM驱动程序通常是指不使用任何额外框架的驱动程序,例如KMDF。其次,WDK 与 VS2012/2013 集成,除了 WDK 之外,您还必须安装它才能获取模板。第三,WDM 模板确实出现在列表中。如果没有,建议重装WDKVS

    【讨论】:

    • 我觉得你的回答令人困惑,我想问你一百个问题来澄清几点,但我认为我最好只是问你这个:WDK 中有驱动程序模板吗对于在 Ring 0 中运行并使用 IoCreateDevice 而不是 WdfDeviceCreate 创建设备的驱动程序?你说的WDM模板是空白的,里面没有源代码。我正在使用 VS2013。
    • @Alexandru 是的,IoCreateDevice 用于裸 WDM 驱动程序。提供的 WDM 模板确实是空的,它提供的只是组件的逻辑树。为什么?这是 MSFT 的一个问题,可能是因为他们强烈宣传 KMDF 作为默认框架。您可以查看 WDK 示例 (msdn.microsoft.com/en-us/library/windows/hardware/…) 了解不同驱动程序的外观,包括 WDM。
    • 我开始明白你在回答中的意思了。两个驱动程序流,WDF 和 WDM。 WDM 是极简主义的,而 WDF 驱动程序不是因为它们使用额外的框架,就像在 KMDF 驱动程序的情况下一样(正如您所指出的那样,它是 WDF 的一个子集)。对吗?
    • icepack,我是个极简主义者。我需要以简约的形式查看事物,据我所知,MSFT 没有提供样本,甚至没有提供模板来为我做这件事。这真的很糟糕,因为我的头脑总是需要以基本形式和基本原则来看待事物;这就是我的方式以及我如何构建信息。那么你会推荐什么,让我作为驱动程序示例的指南?我现在正在看它们,但其中大多数都是矫枉过正的。我几乎觉得使用我之前在问题中链接的 CodeProject 文章中的 WDM 代码会更好。
    • @Alexandru 您可以查看 MSFT 示例存储库中的 Toaster 示例 - go.microsoft.com/fwlink/?LinkId=301841
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    相关资源
    最近更新 更多