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回調函數。