怎么用程序得到U盘的序列号?(是硬件序列号,不是卷号,急,顶者有分,谁回答出来再另开贴给分)

zblaoshu1979 2004-10-11 03:36:35
我是这个思路,大家看看对不对
用这个GUID:53f56307-b6bf-11d0-94f2-00a0c91efb8b
首先 SetupDiGetClassDevs
然后 SetupDiEnumDeviceInterfaces
再 SetupDiGetDeviceInterfaceDetail可以得到一个设备路径,用这个设备路径可以CreateFile打开设备得到句柄,然后用这个句柄用DeviceIoControl函数得到Serial number
结构:IOCTL_STORAGE_QUERY_PROPERTY,可是只能得到硬盘的Serial number,就是得不到U盘的Serial number,这是为什么?
...全文
1083 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zblaoshu1979 2004-10-13
  • 打赏
  • 举报
回复
谢谢Microsnow(冰火) ,结贴。
Joe 2004-10-13
  • 打赏
  • 举报
回复
DDK中的例子要在VC中编译,需设置VC的一些环境参数.至于具体怎么操作,你可以到网上搜索一下,这方面的资料应该很多.祝你成功!
Joe 2004-10-12
  • 打赏
  • 举报
回复
zblaoshu1979(周博):你有DDK吗?在DDK里面就有一个Sample叫做USBView,你可以参考它的源代码.因为
zblaoshu1979 2004-10-12
  • 打赏
  • 举报
回复
Microsnow(冰火):
谢谢你给提供的方法,我想问一下,用DDK对USB设备访问具体要怎么操作呢?
Joe 2004-10-12
  • 打赏
  • 举报
回复
其实根据你的思路,再增加几个动作是可以获得USB Mass Storage Device的Serial Number的.
如果是我,我的方法有两个:
(1)通过驱动程序来向硬件发送命令,这样可以得到存储装置设备实例的Device Instance IDs,这个东西类似于下面的字符串:
硬盘:PCIIDE\IDECHANNEL\4&E3EC092&0&0
USB存储器:USB\VID_04A5&PID_6130\0002F0EB6D990414
像0002F0EB6D990414就是你所要的Serial Number.
(2)用DDK直接对USB设备进行访问,可以得到它.
zblaoshu1979 2004-10-12
  • 打赏
  • 举报
回复
读注册表到是个可行的方案,但是我要确定当前的U盘(比如盘符是I)对应的注册表里面的哪个序列号呀
Mr-Chen 2004-10-12
  • 打赏
  • 举报
回复
那你读注册表不行吗?
sungengyu 2004-10-12
  • 打赏
  • 举报
回复
up
zblaoshu1979 2004-10-12
  • 打赏
  • 举报
回复
PID和VID是哪个,举个例子行吗?
roger_ding 2004-10-12
  • 打赏
  • 举报
回复
U盘不一定有序列号,而且那个不是规定需要有的,但是一定有PID和VID,根据这两个也可以判断
zblaoshu1979 2004-10-12
  • 打赏
  • 举报
回复
麻烦大家帮忙看一下呀
zblaoshu1979 2004-10-12
  • 打赏
  • 举报
回复
非常感谢 Microsnow(冰火)
在结贴之前我再问你个问题,怎么把USBVIEW在VC中编译?(我是用DDK编译的)
Joe 2004-10-12
  • 打赏
  • 举报
回复
DDK里面的USBView你已经编译通过了,这样很好.之所以会出现:iSerialNumber: 0x03,那是因为你没有对设备进行Config Descriptors.你可以试着做一个动作:
启动USBView.exe后,把USB设备插上去.在"Options"菜单下选中"Config Descriptors"项,然后再到"File"菜单下,点击"Refresh F5"子菜单项,这样Serial Number就会看到了.
以下是我看到的结果:
Device Descriptor:
bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x40 (64)
idVendor: 0x04A5 (Acer Peripherals Inc.)
idProduct: 0x6130
bcdDevice: 0x1001
iManufacturer: 0x01
0x0409: "<USB MF>"
iProduct: 0x02
0x0409: "<USB PRODUCT> "
iSerialNumber: 0x03
0x0409: "0002F0EB6D9C050B"
bNumConfigurations: 0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed: Full
Device Address: 0x02
Open Pipes: 2

Endpoint Descriptor:
bEndpointAddress: 0x81
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00

Endpoint Descriptor:
bEndpointAddress: 0x02
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00

Configuration Descriptor:
wTotalLength: 0x0020
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x04
0x0409: "USB/MSC LCD Player"
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0x32 (100 Ma)

Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x08
bInterfaceSubClass: 0x06
bInterfaceProtocol: 0x50
iInterface: 0x05
0x0409: "Internal Device"

Endpoint Descriptor:
bEndpointAddress: 0x81
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00

Endpoint Descriptor:
bEndpointAddress: 0x02
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00
xmzh 2004-10-12
  • 打赏
  • 举报
回复
up
zblaoshu1979 2004-10-12
  • 打赏
  • 举报
回复
有DDK,也看了USBView,但是没怎么看明白,他得到的
Device Descriptor:
bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x40 (64)
idVendor: 0x0EA0
idProduct: 0x6803
bcdDevice: 0x0100
iManufacturer: 0x01
iProduct: 0x02
iSerialNumber: 0x03
bNumConfigurations: 0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed: Full
Device Address: 0x02
Open Pipes: 3

Endpoint Descriptor:
bEndpointAddress: 0x81
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00

Endpoint Descriptor:
bEndpointAddress: 0x02
Transfer Type: Bulk
wMaxPacketSize: 0x0040 (64)
bInterval: 0x00

Endpoint Descriptor:
bEndpointAddress: 0x83
Transfer Type: Interrupt
wMaxPacketSize: 0x0002 (2)
bInterval: 0x01

iSerialNumber: 0x03是什么意思呀?
zblaoshu1979 2004-10-11
  • 打赏
  • 举报
回复
lixiaosan(小三):
是的,有的品牌U盘没有,但有的U盘的确有呀
希望大家多多帮忙
lixiaosan 2004-10-11
  • 打赏
  • 举报
回复
不一定有
zblaoshu1979 2004-10-11
  • 打赏
  • 举报
回复
有的[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR\Disk&Ven_Netac&Prod_OnlyDisk&Rev_1.11\221D19FD3D8E6261&0]

221D19FD3D8E6261就是硬件ID了

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR\Disk&Ven_____&Prod______&Rev_4.00\1F3312000265&0]

1F3312000265就是硬件ID了
agua06 2004-10-11
  • 打赏
  • 举报
回复
不好意思,偶先提个问题,U盘有像硬盘一样的Serial number么?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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