C++读取硬盘序列号

本文总结C++读取硬盘序列号的资料。

1、WMIC读取

C:\Windows\system32>wmic diskdrive get serialnumber
SerialNumber
G21070J022942
56BEP5GCT

本机有两块硬盘,所以显示了两个序列号,且不同品牌的【长度】不相同。

2、diskpart读取

C:\Windows\system32>diskpart

Microsoft DiskPart 版本 10.0.14393.0

Copyright (C) 1999-2013 Microsoft Corporation.
在计算机上: SHBK148129

DISKPART> list disk

磁盘 ### 状态 大小 可用 Dyn Gpt


磁盘 0 联机 111 GB 0 B *
磁盘 1 联机 465 GB 1024 KB *

DISKPART> select disk 0

磁盘 0 现在是所选磁盘。

DISKPART> detail disk

KINGBANK KP330
磁盘 ID: {3DF53970-9663-474D-B933-B8A77707FBF6}
类型 : SATA
状态 : 联机
路径 : 0
目标 : 0
LUN ID : 0
位置路径 : PCIROOT(0)#PCI(1700)#ATA(C00T00L00)
当前只读状态: 否
只读: 否
启动磁盘: 是
页面文件磁盘: 是
休眠文件磁盘: 否
故障转储磁盘: 是
群集磁盘 : 否

卷 ### LTR 标签 FS 类型 大小 状态 信息
卷 0 C BKCC NTFS 磁盘分区 111 GB 正常 启动
卷 1 恢复 NTFS 磁盘分区 450 MB 正常 已隐藏
卷 2 FAT32 磁盘分区 100 MB 正常 系统

疑问:这里取到的磁盘ID和wmic取到的serialnumber并不一致,到底谁才是真正的硬盘序列号呢?

3、ATAPI读取

【转载】硬件信息获取系列二——使用ATAPI获取硬盘信息
描述:看雪论坛,DeviceIoControl。

3.1开发中遇到的问题

——用DeviceIoControl读取的硬盘序列号遇到了前面有【空格】的情况(十六进制20,十进制32),但是WMIC获取的硬盘序列号正常(应该是做了优化处理)。
————解决方案:使用Trim()去掉首尾空格。

4、关键词收集

hard disk serial number,
physical drive serial number,



参考资料:
【20170209】【MSDN】Serial number of harddisk
【20170217】【MSDN】DeviceIoControl function
【20170217】【MSDN】Calling DeviceIoControl


2017-2-9 10:06:34,上海宝山。

你可能感兴趣的:(C++)