如何得到唯一的硬盘序号
来源:互联网 发布:无名体育淘宝 编辑:程序博客网 时间:2024/04/30 03:11
不正确的序列号
利用GetVolumelnformation获取的计算机硬盘卷序列号,不是正确的唯一序列号:
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] 如何得到连续序号
- oracle如何得到32位的世界唯一随机数
- 标识机器唯一的方法讨论及得到硬盘序列号的方法.
- 如何能读取串口硬盘序列号(出厂唯一的序列号)
- 得到硬盘的序列号
- 得到硬盘的盘符
- UIDGenerator生成唯一序号
- 为类的每一个对象生成一个唯一的序号
- 如何得到硬盘序列号?.NET版本[C#]
- 如何得到硬盘序列号?.NET版本[C#]
- 如何增加缺少的序号?
- asp.net中需要创建唯一的序号
- 获取Android设备的唯一识别码|设备号|序号|UUID
- 获取Android设备的唯一识别码|设备号|序号|UUID
- 用atomic_t为多线程分配唯一的序号
- Using texturetool to Compress Textures
- 鼠标划过时整行变色代码
- 线段树 区间更新(成段更新) HDU1698
- 总是陷在有加号"+"的URL参数这个坑里
- 福珑2E主板结构
- 如何得到唯一的硬盘序号
- Oracle GoldenGate 数据加密
- sed 命令
- LinearLayout的android:layout_weight
- 利用iptables+l7-filter+opendpi封QQ和迅雷
- Android获取设备ID
- 大白话系列之C#委托与事件讲解(序言)
- javascript跨域问题
- RMI 规范