【问题标题】:Is it possible to have two different class of Windows devices to share the same .sys driver file?是否可以让两个不同类别的 Windows 设备共享同一个 .sys 驱动程序文件?
【发布时间】:2016-08-23 16:44:35
【问题描述】:

我正在尝试让 WDK7 Toaster 的总线设备和子设备共享同一个 .sys 驱动程序文件。我将 busenum.sys 和 toaster.sys 组合成一个 Nls_ufcom.sys(bus.inf 和 toaster.inf 都将相同的 Nls_ufcom.sys 称为服务二进制文件),但 Windows 报告错误 38(CM_PROB_DRIVER_FAILED_PRIOR_UNLOAD)后用于子设备我从设备管理器中指定 toaster.inf 作为驱动程序。因此,甚至不会为子设备调用 AddDevice() 回调。

我不确定是我做错了什么,还是 Windows 真的不允许这样做。希望从你那里得到一些想法,谢谢。

【问题讨论】:

  • 我的经验是,WDF 不鼓励开发人员为多个设备设置类制作单个功能驱动程序。您始终可以安装驱动程序的多个副本,每个副本都包含一个设备类的 INF 文件。也可以将整个逻辑放入生成原始 PDO(不需要功能驱动程序的 PDO)的(虚拟)总线驱动程序中。您可以制作一个驱动程序,作为多个设备类的下/上过滤器。

标签: windows driver device-driver


【解决方案1】:

我找出原因。原因是:我在 bus.inf 和 toaster.inf 中使用了不同的 service name 。从我的案例中得出的明显结论是,Windows 不允许两个驱动程序服务具有 [相同的服务二进制但不同的服务名称]。

驱动服务名是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services下的子键。

在 bus.inf 和 toaster.inf 中分配相同的服务名称,则驱动被两个设备成功加载。

MSDN CM_PROB_DRIVER_FAILED_PRIOR_UNLOAD 的声明是如此模糊和误导(自 Vista 时代以来),其中说:

此外,如果驱动程序被一个或多个 INF 文件中的多个 INF AddService 指令引用,则会出现此消息。

-- 没有指出关键问题。

[2017-07-01] 十个月后,我回来确认,这个共享系统技巧从Windows XP SP2到最新的Windows 10.1703都很好用,到现在都没有发现问题。我在我的 UFCOM 虚拟 COM 端口驱动程序中成功应用了这个技巧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多