要做一个加密的应用,需要获得U盘的序列号(不是厂商版本),请问有什么办法?[Emot]27[/Emot]
你是需要获取USB的VID还是PID吗?你说的U盘的序列号是什么?怎么没听说过U盘还有序列号的,如果有的话,估计是涉及到厂商请求。
我就是要找一个U盘唯一识别码,请问VID和PID怎么获取啊?
VID,PID在设备描述符里面,只需要获取设备描述符就可以
我获取了设备描述符,是不是这样写的? xWriteCH376Cmd(CMD_GET_DESCR); xWriteCH376Data(0x01); s = Wait376Interrupt( ); if ( s == USB_INT_SUCCESS ) { xWriteCH376Cmd( CMD_RD_USB_DATA0 ); s = l = xReadCH376Data( ); //长度 if ( l<=64 ) { do { *buf2 = xReadCH376Data( ); buf2 ++; } while ( -- l ); } xEndCH376Cmd( ); }
我的结果怎么会是每个U盘的设备描述符都一样?
xWriteCH376Cmd(CMD_GET_DESCR); xWriteCH376Data(0x01); s =Wait376Interrupt( ); if (s ==USB_INT_SUCCESS ) { xWriteCH376Cmd(CMD_RD_USB_DATA0 ); s =l =xReadCH376Data( ); //长度 if (l<=64 ) { do { *buf2 =xReadCH376Data( ); buf2 ++; }while (--l ); } xEndCH376Cmd( ); }
设备描述符长度 18字节,如下定义 typedef struct _USB_DEVICE_DESCRIPTOR { UINT8 bLength; UINT8 bDescriptorType; UINT8 bcdUSBL; UINT8 bcdUSBH; UINT8 bDeviceClass; UINT8 bDeviceSubClass; UINT8 bDeviceProtocol; UINT8 bMaxPacketSize0; UINT8 idVendorL; UINT8 idVendorH; UINT8 idProductL; UINT8 idProductH; UINT8 bcdDeviceL; UINT8 bcdDeviceH; UINT8 iManufacturer; UINT8 iProduct; UINT8 iSerialNumber; UINT8 bNumConfigurations; } USB_DEV_DESCR, *PUSB_DEV_DESCR;
谢谢楼上,为什么我试了几个U盘都是一样的呢?可能没有获取正确?
在计算机上验证一下 就知道了 下载BUSHOUND软件,看看PC机上获取的描述符和你获取的是不是一样?
我又试了下,发现其实是中断返回没有执行成功,但是其他命令都执行的好好地