设备唯一ID(硬件序列ID与卷序列ID)Windows

时间:2012-11-30 17:12:20

标签: c++ windows winapi deviceiocontrol

我一直在搞乱Windows API(我被告知远离WMI因为它不可靠),试图获取我的HD和连接的USB设备的设备序列号。但似乎大多数功能都是为了访问卷序列ID而不是实际制造商的唯一设备序列号。这些卷序列似乎是根据驱动器格式化的最后日期和时间计算的。

嗯,这对我想要开发的应用程序不起作用 - 如果设备被格式化并且相同的信息被复制到该设备,那么当他们启动我的应用程序时,它需要能够处理内部信息(通过序列号识别)属于该设备,如果我使用卷序列ID将丢失。

我查看了http://www.winsim.com/diskid32/的代码,但这似乎只是返回卷序列ID。编辑:实际上,这个值与音量序列不同,您可以在下面的输出中看到:

Vol Name is Hellblazer
Vol Serial is 3358611714
Max Filelength is 255 chars
Filesystem is NTFS

202020202020202020205a204339464a38305345
Z9CJF08ES

第一位代码中的序列(使用GetVolumeInformation)是在命令提示符下键入“vol”时为驱动器获取的十六进制值的十进制版本 - 因此这是卷序列。以下数字是从DeviceIoControl(hwDrive, IOCTL_STORAGE_QUERY_PROPERTY...返回的数字。它与 diskid32 的程序员为我的驱动器获取的ID相同,但与下面的实际序列不同。令人费解的。

对于USB驱动器: 使用PSP_DEVICE_INTERFACE_DETAIL_DATA结构,我可以访问GUID设备枚举,对于我的USB驱动器看起来像这样:

  ?

\ \ USBSTOR#磁盘&安培; ven_toshiba&安培; prod_mk5059gsxp&安培; rev_gn00#203216187542_ _ &安培; 0#{53f563   07-b6bf-11d0-94f2-00a0c91efb8b}

部分设备信息是串行的,据说是:

  

203216187542_ _

此外,我加载了diskpart.exe(一个cmd行分区程序)并查看了我的系统硬盘驱动器和外部USB驱动器的驱动器详细信息,它们都没有匹配我上面得到的任何值:

  

TOSHIBA MK5055GSXF ATA Device Disk ID:00005B9E

     

TOSHIBA MK5059GSXP USB设备磁盘ID:51260D08

这可能会发生什么?在哪里,如何获取实际设备的实际制造序列号?

非常感谢任何帮助!

0 个答案:

没有答案