获取硬盘序列号和卷标序列号
作者:ImMcss 欢迎转载,请以超链接形式保留原文地址。
硬盘序列号和卷标序列号很容易混淆。
硬盘序列号:
英文名 Hard Disk Serial Number, 该号是硬盘出厂时生产厂家为区别产品而设置的, 就像人的身份证,是全球唯一的且只读,出产后将不能被修改。
卷标的序列号:
英文名 Volume Serial Number,该号码是在磁盘(既包括软盘也包括硬盘的逻辑盘)的高级格式化时随机产生的,是可以修改的。
先贴代码
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <stddef.h>
#include <winioctl.h>
#include <vector>
#define MAX_IDE_DRIVES 16
char * ConvertCode (const char * str,
int pos,
int flip,
char * buf)
{
int i;
int j = 0;
int k = 0;
int pos,
int flip,
char * buf)
{
int i;
int j = 0;
int k = 0;
buf [0] = '/0';
if (pos <= 0)
return buf;
if (pos <= 0)
return buf;
if ( ! j)
{
char p = 0;
{
char p = 0;
j = 1;
k = 0;
buf[k] = 0;
for (i = pos; j && str[i] != '/0'; ++i)
{
char c = tolower(str[i]);
k = 0;
buf[k] = 0;
for (i = pos; j && str[i] != '/0'; ++i)
{
char c = tolower(str[i]);
if (isspace(c))
c = '0';
c = '0';
++p;
buf[k] <<= 4;
buf[k] <<= 4;
if (c >= '0' && c <= '9')
buf[k] |= (unsigned char) (c - '0');
else if (c >= 'a' && c <= 'f')
buf[k] |= (unsigned char) (c - 'a' + 10);
else
{
j = 0;
break;
}
buf[k] |= (unsigned char) (c - '0');
else if (c >= 'a' && c <= 'f')
buf[k] |= (unsigned char) (c - 'a' + 10);
else
{
j = 0;
break;
}
if (p == 2)
{
if (buf[k] != '/0' && ! isprint(buf[k]))
{
j = 0;
break;
}
++k;
p = 0;
buf[k] = 0;
}
{
if (buf[k] != '/0' && ! isprint(buf[k]))
{
j = 0;
break;
}
++k;
p = 0;
buf[k] = 0;
}
}
}
}
if ( ! j)
{
j = 1;
k = 0;
for (i = pos; j && str[i] != '/0'; ++i)
{
char c = str[i];
{
j = 1;
k = 0;
for (i = pos; j && str[i] != '/0'; ++i)
{
char c = str[i];
if ( ! isprint(c))
{
j = 0;
break;
}
{
j = 0;
break;
}
buf[k++] = c;
}
}
}
}
if ( ! j)
{
k = 0;
}
{
k = 0;
}
buf[k] = '/0';
if (flip)
for (j = 0; j < k; j += 2)
{
char t = buf[j];
buf[j] = buf[j + 1];
buf[j + 1] = t;
}
for (j = 0; j < k; j += 2)
{
char t = buf[j];
buf[j] = buf[j + 1];
buf[j + 1] = t;
}
i = j = -1;
for (k = 0; buf[k] != '/0'; ++k)
{
if (! isspace(buf[k]))
{
if (i < 0)
i = k;
j = k;
}
}
for (k = 0; buf[k] != '/0'; ++k)
{
if (! isspace(buf[k]))
{
if (i < 0)
i = k;
j = k;
}
}
if ((i >= 0) && (j >= 0))
{
for (k = i; (k <= j) && (buf[k] != '/0'); ++k)
buf[k - i] = buf[k];
buf[k - i] = '/0';
}
{
for (k = i; (k <= j) && (buf[k] != '/0'); ++k)
buf[k - i] = buf[k];
buf[k - i] = '/0';
}
return buf;
}
}
std::vector<std::string> GetHDDSerialNumber (void)
{
int done = FALSE;
int drive = 0;
std::string result;
std::vector<std::string> DriverSerialNos;
for (drive = 0; drive < MAX_IDE_DRIVES; drive++)
{
HANDLE hPhysicalDriveIOCTL = 0;
{
HANDLE hPhysicalDriveIOCTL = 0;
char driveName [256];
sprintf (driveName, "
.//PhysicalDrive%d", drive);
hPhysicalDriveIOCTL = CreateFile (driveName, 0,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, 0, NULL);
if (hPhysicalDriveIOCTL != INVALID_HANDLE_VALUE)
{
STORAGE_PROPERTY_QUERY query;
DWORD cbBytesReturned = 0;
char buffer [10000];
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, 0, NULL);
if (hPhysicalDriveIOCTL != INVALID_HANDLE_VALUE)
{
STORAGE_PROPERTY_QUERY query;
DWORD cbBytesReturned = 0;
char buffer [10000];
memset ((void *) & query, 0, sizeof (query));
query.PropertyId = StorageDeviceProperty;
query.QueryType = PropertyStandardQuery;
query.PropertyId = StorageDeviceProperty;
query.QueryType = PropertyStandardQuery;
memset (buffer, 0, sizeof (buffer));
if ( DeviceIoControl (hPhysicalDriveIOCTL, IOCTL_STORAGE_QUERY_PROPERTY,
& query,
sizeof (query),
& buffer,
sizeof (buffer),
& cbBytesReturned, NULL) )
{
STORAGE_DEVICE_DESCRIPTOR * descrip = (STORAGE_DEVICE_DESCRIPTOR *) & buffer;
char serialNumber [100];
& query,
sizeof (query),
& buffer,
sizeof (buffer),
& cbBytesReturned, NULL) )
{
STORAGE_DEVICE_DESCRIPTOR * descrip = (STORAGE_DEVICE_DESCRIPTOR *) & buffer;
char serialNumber [100];
ConvertCode( buffer,
descrip -> SerialNumberOffset,
1,
serialNumber );
descrip -> SerialNumberOffset,
1,
serialNumber );
DriverSerialNos.push_back( std::string( serialNumber ) );
}
}
}
}
CloseHandle (hPhysicalDriveIOCTL);
}
}
return DriverSerialNos;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR szRoot[ 16 ];
TCHAR szVolume[ 256 ];
TCHAR szSystem[ 256 ];
DWORD dwSerial;
DWORD dwLength;
DWORD dwFlags;
{
TCHAR szRoot[ 16 ];
TCHAR szVolume[ 256 ];
TCHAR szSystem[ 256 ];
DWORD dwSerial;
DWORD dwLength;
DWORD dwFlags;
strcpy( szRoot, "C://" );
// Get Volume info
GetVolumeInformation( szRoot,szVolume, sizeof(szVolume),&dwSerial, &dwLength, &dwFlags, szSystem, sizeof(szSystem) );
// Get Volume info
GetVolumeInformation( szRoot,szVolume, sizeof(szVolume),&dwSerial, &dwLength, &dwFlags, szSystem, sizeof(szSystem) );
std::cout<<"/nGe Mmode Number and Serial Number"<<std::endl<<std::endl;
std::cout<<"Drive/t/t/t:"<<szRoot<<std::endl;
std::cout<<"Drive Volume Number/t:"<<szVolume<<std::endl;
std::cout<<"Drive Serial Number/t:"<<dwSerial<<std::endl<<std::endl;
std::cout<<"Drive Volume Number/t:"<<szVolume<<std::endl;
std::cout<<"Drive Serial Number/t:"<<dwSerial<<std::endl<<std::endl;
// Get HDD Serial Number
std::vector<std::string> hddSerialNums = GetHDDSerialNumber();
for( std::vector<std::string>::iterator it = hddSerialNums.begin();
it != hddSerialNums.end();
it++ )
{
std::cout<<"HDD Serial Number:"<<(*it).c_str()<<std::endl;
}
return 0;
std::vector<std::string> hddSerialNums = GetHDDSerialNumber();
for( std::vector<std::string>::iterator it = hddSerialNums.begin();
it != hddSerialNums.end();
it++ )
{
std::cout<<"HDD Serial Number:"<<(*it).c_str()<<std::endl;
}
return 0;
}
http://www.winsim.com/diskid32/diskid32.html
http://www.pconline.com.cn/pcedu/empolder/gj/vc/0508/691365.html