是否可以让两个不同的 class of Windows 设备共享同一个 .sys 驱动程序文件?

Is it possible to have two different class of Windows devices to share the same .sys driver file?

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

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

我找到原因了。原因是:我在 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 时代以来),它说:

Additionally, this message can appear if a driver is referenced by multiple INF AddService directives in one or more INF files.

-- 没有指出关键问题

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