阅读:2792回复:1
如何得到一个usb hub的指定端口上所接设备的"DEVINST"(或SP_DEVINFO_DATA)结构
其实是要禁用usb hub上特定端口所接的设备。本计划参照ddk自带的usbview的例子,遍历一个hub的所有port,同时用CM_Get_Child(),和CM_Get_Sibling()顺序访问设备的DEVINST结构,获得相应的DEVINST,然后再用它来禁用设备。试过后才发现,CM_Get_Child(),和CM_Get_Sibling()是根据设备载入系统中的顺序而非hub端口的顺序来排列设备的,无法确认接在特定端口上的设备。
也曾试过仿造usbview中的GetExternalHubName()函数,试图通过IOCTL_USB_GET_NODE_CONNECTION_NAME来得到端口上所接设备的Hardware ID,以构造SP_DEVINFO_DATA,但却发现对一般的设备通过此法得不到正确结果(只有当接的是另一个usb hub设备时可以)。 请问有什么其它方法吗?以前没有做过这方面的项目,现在做起来问题越来越多,都快疯掉了。还望各位高手不佞赐教,先谢过了。 [编辑 - 6/12/04 by asdfghjkl] |
|
沙发#
发布于:2004-06-15 08:09
CM_Get_Child()参数dnDevInst是hub nod吗??没有做过,不过从ddk文档来看应该可以呀
其实是要禁用usb hub上特定端口所接的设备。本计划参照ddk自带的usbview的例子,遍历一个hub的所有port,同时用CM_Get_Child(),和CM_Get_Sibling()顺序访问设备的DEVINST结构,获得相应的DEVINST,然后再用它来禁用设备。试过后才发现,CM_Get_Child(),和CM_Get_Sibling()是根据设备载入系统中的顺序而非hub端口的顺序来排列设备的,无法确认接在特定端口上的设备。 |
|
|