2013-05-06 54 views
0

USBPcap作爲上級過濾器附加到所有根集線器。它通過爲{36FC9E60-C465-11CF-8056-444553540000}類添加UpperFilters條目來實現。然後在AddDevice函數中檢索PDO並獲取硬件ID列表。然後檢查USB \ ROOT_HUB和USB \ ROOT_HUB20條目列表。如果它在列表中,則該設備被視爲Root Hub,否則不會。 上述功能的源代碼可在github上獲得:https://github.com/desowin/usbpcap/blob/master/USBPcapDriver/USBPcapHelperFunctions.c#L725WDM:鑑於設備FDO/PDO確定它是否是USB根集線器

此解決方案對於USB 3.0根集線器沒有很好的效果。由於USB 3.0控制器有許多不同的驅動程序,因此不存在標準USB \ ROOT_HUB30條目。基本上每個驅動程序都有自己的硬件ID。我寧願避免列出所有根集線器的硬件ID列表。

我想知道是否有任何方法可靠地確定設備是否是根集線器而不僅僅依靠硬件ID。

我想過檢查,如果設備有GUID_DEVINTERFACE_USB_HUB及其母公司擁有GUID_DEVINTERFACE_USB_HOST_CONTROLLER,但我不知道如何(如果),它可以在內核模式下進行內部調用的AddDevice回調函數。

回答

0

我通過產生非標準的清單解決了這個問題(通過標準的硬件ID我的意思是USB \ ROOT_HUB和USB \ ROOT_HUB20)在用戶空間應用程序的硬件ID並將其存儲在註冊表中。我列舉了所有GUID_DEVINTERFACE_USB_HOST_CONTROLLER實例,並假設子代是根集線器。

驅動檢查硬件ID是存在於由用戶空間應用程序生成的註冊表項。如果匹配,則它被視爲根中心。