2

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

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

我查看了http://www.winsim.com/diskid32/的代码,但这似乎只是返回了卷序列号。编辑:实际上,这个值与卷序列不同,如下面的输出所示:

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#disk&ven_toshiba&prod_mk5059gsxp&rev_gn00#203216187542_ _ &0#{53f563 07-b6bf-11d0-94f2-00a0c91efb8b}

该设备信息的这一部分是序列号,据说:

203216187542_ _

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

东芝 MK5055GSXF ATA 设备磁盘 ID:00005B9E

东芝 MK5059GSXP USB 设备磁盘 ID:51260D08

这里会发生什么?在哪里以及如何访问实际设备的实际制造序列号?

任何帮助将不胜感激!

4

0 回答 0