2016-08-23 70 views
0

我试图让WDK7烤面包机的母线设备和子设备共享一个.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设备可以共享相同的.sys驱动程序文件?

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

enter image description here

enter image description here

+0

我的经验是,WDF不鼓励开发者为多个设备设置类创建单个功能驱动程序。您始终可以安装驱动程序的多个副本,每个副本都包含一个设备类的INF文件。也可以将整个逻辑放入产生原始PDO(不需要功能驱动程序的PDO)的(虚拟)总线驱动程序中。您可以使驱动程序充当多个设备类的较低/较高过滤器。 –

回答

1

我找出原因。原因是:我在bus.inf和toaster.inf中使用不同的服务名称。从我的情况看来,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端口驱动程序中成功应用了这个技巧。

相关问题