是否可以使用两种不同类型的Windows设备来共享相同的.sys驱动程序文件?

时间:2016-08-23 16:44:35

标签: windows driver device-driver

我正在尝试让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确实不允许这样做。希望得到你的一些想法,谢谢你。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

我找出原因。原因是:我在bus.inf和toaster.inf中使用了不同的服务名称。从我的案例中可以看出,Windows不允许两个驱动程序服务具有[相同的服务二进制文件但是服务名称不同]。

驱动程序服务名称是(face face prop1 val1 prop2 val2…) 下的子键。

在bus.inf和toaster.inf中分配相同的服务名称,然后两个设备都成功加载了驱动程序。

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

  

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

- 它没有指出关键问题。

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