2016-08-23 66 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端口驅動程序中成功應用了這個技巧。

相關問題