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

VC获取硬盘序列号或者MAC地址?(,)

2011-12-26 
VC获取硬盘序列号或者MAC地址?(在线等,急)VC获取硬盘序列号或者MAC地址?(在线等,急)最好提供源码,非常感谢

VC获取硬盘序列号或者MAC地址?(在线等,急)
VC获取硬盘序列号或者MAC地址?(在线等,急)
最好提供源码,非常感谢!
zhoumm10429@126.com

[解决办法]
硬盘序列号似乎没有办法获得,硬盘厂商不会提供给系统吧,设备号或ID有可能。
呵呵,你是不是没搞清楚?
偶只听过获得cpu的id和网卡的MAC地址,这种倒是有,不过偶没试过这玩意。
这一篇是硬盘ID和网卡MAC的,
http://blog.csdn.net/CNBT/archive/2005/01/07/244333.aspx
[解决办法]
#pragma comment(lib, "IpHlpApi.lib")
#pragma comment(lib, "NetApi32.lib")

#include "stdio.h" 
#include "windows.h"
#include "mstcpip.h"
#include "IPHlpApi.h"
#include "Nb30.h"

struct ASTAT{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff[30];
};

bool GetMacByNetBios(unsigned char * mac)
{
if(!mac)
return false;

ASTAT Adapter;
NCB ncb;

memset( &ncb, 0, sizeof(ncb) ); 
ncb.ncb_command = NCBRESET; 
ncb.ncb_lana_num = 0; 
Netbios( &ncb ); 

memset( &ncb, 0, sizeof(ncb) ); 
ncb.ncb_command = NCBASTAT; 
ncb.ncb_lana_num = 0; 
strcpy( (char *)ncb.ncb_callname, "* " ); 
ncb.ncb_buffer = (unsigned char *) &Adapter; 
ncb.ncb_length = sizeof(Adapter); 

if(Netbios(&ncb) == 0)
{
memcpy(mac, Adapter.adapt.adapter_address, 6);
return true;
}
else
{
memset(mac, 0, 6);
return false;
}
}

bool GetMacByIpHelp(unsigned char * mac)
{
if(!mac)
return false;

ULONG ulOutBufLen = 0;
if(GetAdaptersInfo(NULL, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW )
{
int nDivisor = sizeof(IP_ADAPTER_INFO);
if(sizeof(time_t) == 8)
nDivisor -= 8;

int nCount = ulOutBufLen / nDivisor;
PIP_ADAPTER_INFO pAdapterInfo = new IP_ADAPTER_INFO[nCount];

if(GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS )
{
delete[] pAdapterInfo;
memset(mac, 0, 6);
return false;
}
else
{
memcpy(mac, pAdapterInfo->Address, 6);
delete[] pAdapterInfo;
return true;
}
}
else
{
memset(mac, 0, 6);
return false;
}
}

int main()
{
unsigned char mac[6];
GetMacByNetBios(mac);
printf("Get MAC by NetBios: %02X-%02X-%02X-%02X-%02X-%02X\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);

GetMacByNetBios(mac);
printf("Get MAC by IpHelp: %02X-%02X-%02X-%02X-%02X-%02X\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);

return 0;
}
[解决办法]
获得磁盘序列号BOOL GetVolumeInformation(
LPCTSTR lpRootPathName, // root directory 
LPTSTR lpVolumeNameBuffer, // volume name buffer
DWORD nVolumeNameSize, // length of name buffer
LPDWORD lpVolumeSerialNumber, // volume serial number
LPDWORD lpMaximumComponentLength, // maximum file name length
LPDWORD lpFileSystemFlags, // file system options
LPTSTR lpFileSystemNameBuffer, // file system name buffer
DWORD nFileSystemNameSize // length of file system name buffer
)
LPTSR namebuf=new char[12];
DWORD namesize=12;
DWORD serialnumber;
DWORD maxlen;
DWORD fileflag;
LPTSTR systemnamebuf=new char[10];
DWORD systemnamesize=10;
CString temp;
::GetVolumeInformation("c:\,namebuf,namesize,
&serialnumber,
&maxlen,&fileflag,systemnamebuf,systemnamesize");
temp.Format("%x",serialnumber);




[解决办法]
http://www.codeproject.com/internet/getmac.asp
http://www.codeproject.com/useritems/DriveInfoEx.asp
[解决办法]
CString strMac;
NCB ncb;
ADAPTER_STATUS adapt;
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command = NCBRESET;
//首先对网卡发送一个NCBRESET命令以便进行初始化 
Netbios(&ncb);
ncb.ncb_command = NCBASTAT;
strcpy((char *)ncb.ncb_callname,"*");
// 指定返回的信息存放的变量 
ncb.ncb_buffer = (unsigned char *)&adapt;
ncb.ncb_length = sizeof(adapt);
// 发送NCBASTAT命令以获取网卡的信息 
Netbios(&ncb);
// 把网卡MAC地址格式化成常用的16进制形式
strMac.Format( "%02X%02X-%02X%02X-%02X%02X\n",
adapt.adapter_address[0],
adapt.adapter_address[1],
adapt.adapter_address[2],
adapt.adapter_address[3],
adapt.adapter_address[4],
adapt.adapter_address[5]);





热点排行