首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

读取SATA硬盘序列号的步骤

2013-01-17 
读取SATA硬盘序列号的方法?本帖最后由 VisualEleven 于 2012-10-10 07:32:12 编辑各位大侠,VC环境下要去取

读取SATA硬盘序列号的方法?
本帖最后由 VisualEleven 于 2012-10-10 07:32:12 编辑 各位大侠,VC环境下要去取SATA硬盘序列号与IDE硬盘序列号的方法一样吗?

我用网上的DeviceIoControl这个函数写的,

char sFilePath[64]={0};  
sprintf(sFilePath,"\\\\.\\PHYSICALDRIVE%d",driver);//modify by lonkil 2008-07-13  
HANDLE hFile = INVALID_HANDLE_VALUE;  
hFile = ::CreateFile(sFilePath,  
  GENERIC_READ | GENERIC_WRITE,  
  FILE_SHARE_READ | FILE_SHARE_WRITE,  
  NULL, OPEN_EXISTING,  
  0, NULL);  
if (hFile == INVALID_HANDLE_VALUE) return -1;  
DWORD dwBytesReturned;  
GETVERSIONINPARAMS gvopVersionParams;  
DeviceIoControl(hFile,  
  SMART_GET_VERSION,  
  NULL,  
  0,  
  &gvopVersionParams,  
  sizeof(gvopVersionParams),  
  &dwBytesReturned, NULL);  
if(gvopVersionParams.bIDEDeviceMap <= 0) return -2;  
// IDE or ATAPI IDENTIFY cmd  
int btIDCmd = 0;  
SENDCMDINPARAMS InParams;  
int nDrive =0;  
btIDCmd = (gvopVersionParams.bIDEDeviceMap >> nDrive & 0x10) ? IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY;  
 
// 输出参数  
BYTE btIDOutCmd[sizeof(SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE - 1];  
if(DoIdentify(hFile,  
  &InParams,  
  (PSENDCMDOUTPARAMS)btIDOutCmd,  
  (BYTE)btIDCmd,  
  (BYTE)nDrive, &dwBytesReturned) == FALSE) return -3;  
::CloseHandle(hFile);  
DWORD dwDiskData[256];  
USHORT *pIDSector; // 对应结构IDSECTOR,见头文件  
pIDSector = (USHORT*)((SENDCMDOUTPARAMS*)btIDOutCmd)->bBuffer;  
for(int i=0; i < 256; i++) dwDiskData = pIDSector;  
// 取系列号  
ZeroMemory(szSerialNumber, sizeof(szSerialNumber));  
strcpy(szSerialNumber, ConvertToString(dwDiskData, 10, 19));  
// 取模型号  
ZeroMemory(szModelNumber, sizeof(szModelNumber));  
strcpy(szModelNumber, ConvertToString(dwDiskData, 27, 46));  
return 0;  


到if(gvopVersionParams.bIDEDeviceMap <= 0) return -2; 这句话时就返回-2,不知道为什么,是因为这个方法只能读取IDE硬盘的序列号吗?

SATA硬盘的序列号如何读呢?

还有就是软件加密还有什么好方法吗?谢谢各位!
[解决办法]
去序列号 应该用到reg的一些信息 具体的东西应该参考 下调用注册表的函数
[解决办法]
Using WMI

[解决办法]
http://www.iflym.com/index.php/code/201203080002.html
[解决办法]
http://blog.chinaunix.net/uid-20680669-id-3125420.html
[解决办法]
你的代码读ide没问题吗?

热点排行