asdfghjkl
驱动牛犊
驱动牛犊
  • 注册日期2002-06-13
  • 最后登录2006-05-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2792回复:1

如何得到一个usb hub的指定端口上所接设备的"DEVINST"(或SP_DEVINFO_DATA)结构

楼主#
更多 发布于:2004-06-12 17:20
其实是要禁用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]
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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端口的顺序来排列设备的,无法确认接在特定端口上的设备。

也曾试过仿造usbview中的GetExternalHubName()函数,试图通过IOCTL_USB_GET_NODE_CONNECTION_NAME来得到端口上所接设备的Hardware ID,以构造SP_DEVINFO_DATA,但却发现对一般的设备通过此法得不到正确结果(只有当接的是另一个usb hub设备时可以)。

请问有什么其它方法吗?以前没有做过这方面的项目,现在做起来问题越来越多,都快疯掉了。还望各位高手不佞赐教,先谢过了。

[编辑 -  6/12/04 by  asdfghjkl]
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
游客

返回顶部