如何得到唯一的硬盘序号
2012-12-21 16:02
337 查看
不正确的序列号
利用GetVolumelnformation获取的计算机硬盘卷序列号,不是正确的唯一序列号:
该函数获取的序列号在硬盘格式化后会发生变化。
正确获取硬盘的序列号
正确获取硬盘序列号代码如下:
利用GetVolumelnformation获取的计算机硬盘卷序列号,不是正确的唯一序列号:
01.
void
CWJGISApp::Register()
02.
{
03.
DWORD
VolumeSerialNumber;
04.
GetVolumeInformation(
"c:\\"
,NULL,NULL,&VolumeSeriaINumber,NULL,NULL,NULL,NULL);
05.
char
charVolumeSerialNumber[l0];
06.
itoa(VolumeSerlalNumber,charVoIumeSerialNumber,10);
07.
CString strTemp;
08.
strTemp.Format(
"%s"
,charVolumeSerialNumber);
09.
}
该函数获取的序列号在硬盘格式化后会发生变化。
正确获取硬盘的序列号
正确获取硬盘序列号代码如下:
//读般硬盘序列号函数 char* CGetHDSerial::GetHDSerial() { m_buffer[0]='\n'; //得到当前操作系统版本 OSVERSIONINFO OSVersionInfo; OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&OSVersionInfo); if(OSVersionInfo.dwPlatformld != VER_PLATFORM_WIN32_NT) { //Windows 9x/ME下读取硬盘序列号 WORD m_wWin9xl'HDSerial[256]; Win9xReadHDSerial(m_wWin9xHDSerial); strcpy (m_buffer, WORDToChar(m _wWin9xHDSerial, 10, 19)); } else { //Windows NT/2000/XP下读取硬盘序列弓 DWORD m_wWinNTHDSerial[256]; //判断是否有SCSI硬盘 if (!WinNTReadIDEHDSerial(m_wWinNTHDSerial)) WinNTReadSCSIHDSerial(m_wWinNTHDSerial); strcpy (m_buffer,DWORDToChar(m_wWinNTHDSerial,10, 19)); } return m_buffer; } //Windows NT/2000/XP下读取IDE硬盘序列号 BOOL CGetHDScriaI::WinNTReadIDEHDSerial(DWORD* buffer) { BYTE JdOutCmd [sizeof(SENDCMDOUTPARAMS)+IDFNTIFY_BUFFER_SIZE - 1]; BOOL bFlag = FALSE; int drive = 0; Char driveName[256]; HANDLE hPhysicalDrivelOCTL=0; Sprintf(driveName,"\\\.\\PhysicalDrive%d",drive); //Windows NT/2000/XP 下创建文件需要管理员权限 hPhysicalDriveIOCTL=CreateFile(driveName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL); if(hPhysicalDriveIOCTL!=INVALID_HANDLE_VALUE) { GETVERSIONOUTPARAMS VersionParams; DWORD cbBytesReturned=0; //得到驱动器的I/O控制器版本 memser((void*)&VersionParams,0,sizeof(VersionParams)); if(DeviceIoControl(hPhysicalDriveIOCTL,IOCTL_GET_VERSION,NULL,0,&VersionPaiams,sizeof(VersionParams),sizeof(VersionParams), &cbBytesReturned,NULL)) { if(VersionParams.bIDEDeviceMap>0) { BYTE bIDCmd=0;//IDE或者ATAPI识别命令 SENDCMDINPARAMS scip; //如果驱动器是光驱,采用命令IDE_ATAPI_IDENTIFY,command,否则采用命令IDE_ATA_IDENTIFY读取驱动器信息 bIDCmd=(VersionParams.bIDEDeviceMap>>drive&0x10)? IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY; memset(&scip,0,sizeof(scip)); memset(IdOutCmd,0,sizeof(IdOutCmd)); //获取驱动器信息 if(WinNTGetIDEHDInfo(hPhysicalDrivelOCTL,&scip,(PSENDCMDOUTPARMS)&IdOutCmd,(BYTE)bIDCmd,(BYTE)drive,&cbBytesReturned)) { int m=0; USHORT*pldSector=(USHORT*)((PSENDCMDOUTPARAMS)IdOutCmd)->bBuffer; for(m=0;m<256;m++) buffer[m]=pIdSector[m]; bFlag=TRUE; //读取硬盘信息成功 } } } CloseHandle(hPhysicalDriyeIOCTL); //关闭句柄 } Return bFlag; }
相关文章推荐
- 如何得到唯一的硬盘序号
- 如何得到硬盘物理序号
- [sql server] 如何得到连续序号
- 如何得到硬盘序列号?.NET版本[C#]
- 如何用Java得到硬盘空间
- 如何得到硬盘序列号?.NET版本[C#]
- oracle如何得到32位的世界唯一随机数
- 如何得到硬盘序列号[C#]
- 如何用快手得到本机硬盘的序列号
- oracle如何得到32位的世界唯一随机数
- 标识机器唯一的方法讨论及得到硬盘序列号的方法.
- 如何能读取串口硬盘序列号(出厂唯一的序列号)
- .Net如何得到Mac地址 和硬盘序列号
- 如何得到连续序号
- [VB.NET]如何打开EXCEL同时得到它的每个标签
- jquery实现如何得到那个单选框被选中
- win2003系统硬盘如何保持稳定使用心得分享
- iOS 如何生成唯一的设备ID
- 如何得到当前CAD打印设备列表及其他打印设置内容
- ASP.NET(C#)中两日期相减,如何得到相差的月份数