阅读:4548回复:9
如何获取usb设备类型,急!!
请问应用程序如何才能获得一个usb设备的类型(打印机、u盘等)?
用DeviceIoControl(hHubDevice, IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION,...) 试图获取一个hub所接设备的usb设备描述符,得不到正确结果。请问这是为什么?还有其它方法吗? [编辑 - 6/12/04 by asdfghjkl] |
|
最新喜欢:xingzh... |
沙发#
发布于:2004-06-03 20:02
要获得一个usb设备的类型,你应该找的是接口描述符中的bInterfaceClass才对呀
请问应用程序如何才能获得一个usb设备的类型(打印机、u盘等)? |
|
|
板凳#
发布于:2004-06-04 12:40
参考usbview中的GetConfigDescriptor()中获得the entire Configuration Descriptor,应该需要两次调用DeviceIoControl,第一次是获得the entire Configuration Descriptor的长度,然后在分配空间,第二次再调用就可以获得了完整的配置信息。
你要的数据应该位于第9+5个byte上。 谢谢回复! |
|
|
地板#
发布于:2004-06-04 16:15
USB从设备的分类可以从USB设备接口描述符(Standard Interface Descriptor)对应的的bInterfaceClass这一个byte得到。
bInterfaceClass的典型代码为1,2,3,6,7,8,9,10,11,255。分别代表意思为1-audio:表示一个音频设备。2-communication device:通讯设备,如电话,moden等等。3-HID:人机交互设备,如键盘,鼠标等。6-image图象设备,如扫描仪,摄像头等,有时数码相机也可归到这一类。7-打印机类。如单向,双向打印机等。8-mass storage海量存储类。所有带有一定存储功能的都可以归到这一类。如数码相机大多数都归这一类。9-hub类。11-chip card/smart card。255-vendor specific.厂家的自定义类,主要用于一些特殊的设备。如接口转接卡等。 |
|
地下室#
发布于:2004-06-04 17:22
好!
还是你这个详细! USB从设备的分类可以从USB设备接口描述符(Standard Interface Descriptor)对应的的bInterfaceClass这一个byte得到。 |
|
|
5楼#
发布于:2004-06-05 13:56
非常感激两位的解答,虽然还不知这种方法能否达到我需要的效果。
最后请问如何给您们分呢? |
|
6楼#
发布于:2004-06-08 17:52
不对,如果是用usbview的话,它已经获得了,你直接用就可以了,只是记得是第9+5个byte就是你所需的
刚才试了一下,在usbview的示例中, USB_CONFIGURATION_DESCRIPTOR和USB_DEVICE_DESCRIPTOR(但bDeviceClass总是为0)都能正确得到。而试图获取USB_INTERFACE_DESCRIPTOR时,在第一次调用DeviceIoControl获得描述符长度时,就出错了(success=false)。这是为什么呀? |
|
|
7楼#
发布于:2004-06-12 18:24
已发过一些问题(包括刚发的“如何得到一个usb hub的指定端口上所接设备的"DEVINST"),但现在仔细一想发现可能没有把问题真正讲清楚,只好把以前的问题翻出来再发一次。浪费的版面就不好意思了,也在此感谢曾经热心帮助过的各位高手。
其实我是想从SP_DEVINFO_DATA/DEVINST得到usb设备的Interface Descriptor,以根据设备类型来决定是否禁用一个设备。但我目前只知道可用usbview的方法,通过IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION来获取接口描述符中的设备类型。现在却发现,不知怎样才能通过该方法得到对应的SP_DEVINFO_DATA或DEVINST,所以不能禁用设备。 请问还有其它方法吗?望赐教,谢了。 |
|
8楼#
发布于:2007-12-29 10:04
query.PropertyId = StorageAdapterProperty;
query.QueryType = PropertyStandardQuery; status = DeviceIoControl( hDevice, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof( STORAGE_PROPERTY_QUERY ), &outBuf, 512, &returnedLength, NULL ); |
|
|
9楼#
发布于:2010-06-08 16:37
我也要
|
|