3.1不正确的序列号 利用GetVolumeInformation获取的计算机硬盘卷序列号,不是正确的惟一序列号。
void CWJGISApp::Register()
{
DWORD VolumeSerialNumber;
GetVolumeInformation("c:\\",NULL,NULL,&VolumeSerialNumber,NULL,NULL,NULL,NULL);
char charVolumeSerialNumber[10];
itoa(VolumeSerialNumber,charVolumeSerialNumber,10);
CString strTemp;
strTemp.Format("%s",charVolumeSerialNumber);
}
该函数获取的序列号在硬盘格式化后会发生变化
3.2 正确获取硬盘的序列号
// 读取硬盘序列号函数
char* CGetHDSerial::GetHDSerial()
{
m_buffer[0]='\n';
// 得到当前操作系统版本
OSVERSIONINFO OSVersionInfo;
OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx( &OSVersionInfo);
if (OSVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT)
{
// Windows 9x/ME下读取硬盘序列号
WORD m_wWin9xHDSerial[256];
Win9xReadHDSerial(m_wWin9xHDSerial);
strcpy (m_buffer, WORDToChar (m_wWin9xHDSerial, 10, 19));
}
else
{
// Windows NT/2000/XP下读取硬盘序列号
DWORD m_wWinNTHDSerial[256]; // 判断是否有SCSI硬盘
|