2015-06-25 43 views
1

我正在开发附加到USB大容量存储设备的WDM筛选器驱动程序。我需要能够浏览父母和祖父母设备链(即集线器),并检查供应商和产品ID。确定连接到USB大容量存储设备的母设备链

使用IoGetDeviceAttachmentBaseRef(),我可以访问海量存储设备的PDO,但是我已经触及USB Mass Storage设备堆栈的底部。所以现在我需要访问父USB集线器堆栈,但我不知道如何做到这一点。

如果循环访问大容量存储设备的PDO中的NextDevice列表,可以看到列出的集线器的PDO,但这样做并不能告诉集线器是集群的父/祖父母储存设备。

回答

0

您应该可以轻松地将其作为过滤器附加到所有USB设备上,因为它们都属于单个设备设置类(USB)。然后,请注意IRP_MJ_PNP:IRP_MN_QUERY_DEVICE_RELATIONSRelationType设置为BusRelations以通知设备之间的父子关系。

如果通过在大容量存储设备的PDO的NextDevice列表循环,你可以看到列出的枢纽PDO,但这样做这样的说法并没有告诉我的枢纽的父母/祖父母大容量存储设备。

使用IoEnumerateDeviceObjectList行走NextDevice列表更安全。