1

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

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

如果您遍历大容量存储设备的 PDO 中的 NextDevice 列表,您可以看到列出的集线器的 PDO,但这样做并不能告诉我集线器是大容量存储设备的父/祖父。

4

1 回答 1

0

您应该能够轻松地将过滤器附加到所有 USB 设备,因为它们都属于单个设备设置类 (USB)。然后,注意设置以IRP_MJ_PNP:IRP_MN_QUERY_DEVICE_RELATIONS了解设备之间的父子关系。RelationTypeBusRelations

如果您遍历大容量存储设备的 PDO 中的 NextDevice 列表,您可以看到列出的集线器的 PDO,但这样做并不能告诉我集线器是大容量存储设备的父/祖父。

使用IoEnumerateDeviceObjectList遍历 NextDevice 列表更安全。

于 2016-12-09T13:16:39.747 回答