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]);