【问题标题】:WDK Driver load issue (The service cannot be started, either because it is disabled)WDK 驱动程序加载问题(服务无法启动,或者因为它被禁用)
【发布时间】:2016-06-24 18:18:51
【问题描述】:

我使用 Windows 8.1 编写了许多驱动程序,加载时没有任何问题。当我尝试加载我在 Visual Studio 中构建的新的基本 KMDF 驱动程序时,似乎存在某种问题。我能够编辑源代码并编译在以前版本的 Windows 上构建的新版本的驱动程序项目,我认为 WDK 将是这里真正的罪魁祸首。即使我编辑源代码并重新编译,我也能够加载原始项目在 Windows 8.1 中生成的驱动程序,但特别是如果我尝试通过 Visual Studio 创建一个新的驱动程序项目,即内核模式驱动程序的示例库,它会失败加载错误:

“服务无法启动,可能是因为它被禁用,或者因为它没有与之关联的启用设备”

几点: 驱动程序每次都无法加载相同的错误,我有自己的 digicert 认证的受信任证书,并且我尝试禁用驱动程序签名强制,两者都出现相同的错误。所以可以肯定地说证书不是问题。

我能分辨出新旧 WDK 源之间的唯一主要区别是旧版本专门具有要构建的 Windows 版本,但新版本具有“通用性”,尽管通过设置看起来它只会为 Windows 10 构建.

我没有做任何愚蠢的错误意思,我正在编译 x64 等...

我开始认为 WDK KMDF 基本模板可能存在某种问题。

我宁愿不必破坏旧项目(驱动程序)来加载成功的“新”驱动程序。

【问题讨论】:

  • 你的问题是什么?
  • @AshishAhujaツ 我认为这将是“我该如何解决这个问题”之类的事情。麦克斯,你能澄清一下吗?
  • 是的,很抱歉,我想修复我遇到的错误:“服务无法启动,要么是因为它被禁用,要么是因为它没有与之关联的启用设备”我尝试了多种加载驱动程序的方法,所有这些方法都适用于我的旧资源。

标签: c driver loading wdk kmdf


【解决方案1】:

您能否指定它是旧版驱动程序还是 pnp 驱动程序。

我遇到了类似的问题,但我犯的错误是编译 pnp 驱动程序并尝试将其加载为旧版驱动程序。

为了完成pnp指定差异将是一个带有AddDevice例程的驱动程序。此类驱动程序的启动类型应为 0,并在启动时加载。需要在添加设备例程中将驱动程序附加到特定的设备对象。

旧版驱动程序没有 AddDevice 例程,我们从 DriverEntry 本身调用 IoCreateDevice。

【讨论】:

  • hastebin.com/mawaboluvu.lua (kmdf 模板附带的默认 driver.c)我假设您所说的内容是正确的。我只是有点困惑,他们会在 WDK 版本的模板中更改类似的内容。我可以简单地将代码转换为作为旧版驱动程序运行,还是有另一个基本旧版模板?感谢您的回复,我会接受答案,因为它是正确的答案,但感谢您提供更多信息。
  • 是的,您可以肯定地将 pnp 驱动程序转换为旧版驱动程序。只是你将不得不做一些乏味的清理工作。例如他们一定已经定义了很多似乎与旧版驱动程序无关的新结构。您必须撤消他们在 AddDevice 例程中完成的所有编码,并确保撤消 AddDevice 中代码所需的任何相应清理。但如果您对旧版驱动程序足够了解,这应该不难。
  • 我只是打算使用WindowsDriver->Legacy->Empty WDM(我认为这是名称)并自己添加方法,这似乎是最简单的方法。
  • :) 哦,是的。我的印象是您想使用示例驱动程序。否则很容易创建一个空项目并做任何你想做的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 2013-11-25
相关资源
最近更新 更多