有关usb设备唯一标识的问题,vid,pid,iSerialNumber

sparrow17 2014-09-05 03:08:15
最近在做有关usb的驱动,想得到能够USB设备唯一的标志,看资料似乎vid,pid,iSerialNumber可以确定,但是iSerialNumber这个代表什么呢,在驱动层的话通过发送urb能得到iSerialNumber的值(一段字符串,也不确定是否正确),但在应用层能不能得到,希望大牛解答下。
...全文
1447 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdayong 2014-11-12
  • 打赏
  • 举报
回复
pUsd=(USB_STRING_DESCRIPTOR*)ExAllocatePool(NonPagedPool,sizeof(USB_STRING_DESCRIPTOR)); 这里分配的内存空间太小了,可以按4楼的方法做,或者一次性申请大点也可以。 另:在应用层也可以获取到iSerialNumber,要看你用什么方式来获取
lanlangxt 2014-09-12
  • 打赏
  • 举报
回复
如果不是HID类的USB设备,怎么样得到呢
sparrow17 2014-09-09
  • 打赏
  • 举报
回复
引用 2 楼 Saleayas 的回复:
使用 DeviceIOControl 获取 描述符。然后从 iSerialNumber 索引就可以得到其指定位置的数据。 如果你的设备是 HID 设备。 这是微软的驱动,可以使用 HidD_GetSerialNumberString. 对于 HID 设备,这个函数自己按照索引得到指定的字符串。
看了这个函数确实有用,想再多问下,驱动层中获取到了SerialNumberString,但是内容和我用USBview看到的不一样, 但是开头第一个字符是相同的,字符串长度也对,改了下languageid还是 不行,代码如下: PURB urb; urb=NULL; urb=(PURB)ExAllocatePool(NonPagedPool,sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST)); if(!urb) return; USB_STRING_DESCRIPTOR *pUsd; USHORT lanid=0x0409; pUsd=(USB_STRING_DESCRIPTOR*)ExAllocatePool(NonPagedPool,sizeof(USB_STRING_DESCRIPTOR)); UsbBuildGetDescriptorRequest(urb,(USHORT)sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST), USB_STRING_DESCRIPTOR_TYPE,index,lanid,pUsd,NULL,sizeof(USB_STRING_DESCRIPTOR),NULL); NTSTATUS ntStatus = CallUSBD(dev,urb); WCHAR temp[256]={0}; memcpy(temp,pUsd->bString,(USHORT)(pUsd->bLength)-2); 是不是我调用的有问题。
sparrow17 2014-09-09
  • 打赏
  • 举报
回复
上面那个问题是长度引起的,sizeof(USB_STRING_DESCRIPTOR)太小了,没有字符串的空间。可以发送两次urb,第一次得到长度,重新申请再发送一次就可以了。结贴。
Saleayas 2014-09-05
  • 打赏
  • 举报
回复
使用 DeviceIOControl 获取 描述符。然后从 iSerialNumber 索引就可以得到其指定位置的数据。 如果你的设备是 HID 设备。 这是微软的驱动,可以使用 HidD_GetSerialNumberString. 对于 HID 设备,这个函数自己按照索引得到指定的字符串。
sparrow17 2014-09-05
  • 打赏
  • 举报
回复
再者想问下,有没有简单的,能确定某一usb设备的标识(序列号一类的)

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧