硬盘序列号:
英文名 Hard Disk Serial Number, 该号是硬盘出厂时生产厂家为区别产品而设置的, 就像人的身份证,是全球唯一的且只读,出产后将不能被修改。
卷标的序列号:
英文名 Volume Serial Number,该号码是在磁盘(既包括软盘也包括硬盘的逻辑盘)的高级格式化时随机产生的,是可以修改的
获取硬盘的id, api函数得到的都是和windows安装相关的id,也就是windows硬件管理器分配的id,而不是真正的硬件生产厂商的id. 所以,为了得到真正的和硬盘序列号相关的信息,最好是使用WMI服务查询
GetPartitionVolumeSerialNumber.cpp
#include "stdafx.h"
DWORD GetPartitionVolumeSerialNumber()//GetDisk partition volumn id,nothard disk id
{
TCHAR lpRootPathName[]=_T("\\\\.\\PhysicalDrive0\\");//Use physical drive,notC:disk
TCHAR lpVolumeNameBuffer[12 ];//disk volumn
DWORD nVolumeNameSize =12;
DWORD VolumeSerialNumber;//Serial number
DWORD MaximumComponentLength;
TCHAR lpFileSystemNameBuffer[10 ];
DWORD nFileSystemNameSize=10;
DWORD FileSystemFlags;
BOOL ret=GetVolumeInformation(lpRootPathName,
lpVolumeNameBuffer,
nVolumeNameSize,
&VolumeSerialNumber,
&MaximumComponentLength,
&FileSystemFlags,
lpFileSystemNameBuffer,
nFileSystemNameSize);
printf("Partition serial number is %0xd\n",VolumeSerialNumber );
if( ret )
{
return VolumeSerialNumber;
}
else
{
return FALSE;
}
}
GetPhysicalSerialNumber.cpp
#include"stdafx.h"
#include<Iphlpapi.h>
#pragma comment(lib,"Iphlpapi")
//#pragma warning(disable