获取网卡MAC地址的问题,重新安装系统后,MAC地址会变
lbg 2006-02-11 08:42:37 我在程序里面要使用用户网卡MAC地址认证,但是,如果用户安装了诺顿或其它一些软件的时候,我获取的MAC地址会变,同样情况也出现在用户重装系统后.这样,我必须每次都要在数据库里改用户网卡MAC地址,很麻烦,是不是我获取MAC地址方法有问题?以下是我的代码:
这是获取机器上所有的网卡地址:
void __fastcall TUser::GetMacList(TStrings * macs) const
{
LANA_ENUM AdapterList;
NCB Ncb;
memset(&Ncb, 0, sizeof(NCB));
Ncb.ncb_command = NCBENUM;
Ncb.ncb_buffer = (unsigned char *)&AdapterList;
Ncb.ncb_length = sizeof(AdapterList);
Netbios(&Ncb);
AnsiString mac_addr;
for (int i = 0; i < AdapterList.length; i++)
{ //lenght为当前机器所安装的网卡数量
if (!GetAdapterInfo(AdapterList.lana[i], mac_addr))
{
Application->MessageBox("读取硬件标志错误","错误信息",MB_OK);
break;
}
else
{
macs->Add(mac_addr);
}
}
}
bool __fastcall TUser::GetAdapterInfo(int adapter_num, AnsiString &mac_addr)
{
// Reset the LAN adapter so that we can begin querying it
NCB Ncb;
memset(&Ncb, 0, sizeof(Ncb));
Ncb.ncb_command = NCBRESET;
Ncb.ncb_lana_num = adapter_num;
if (Netbios(&Ncb) != NRC_GOODRET) {
mac_addr = "bad (NCBRESET): ";
mac_addr += AnsiString(Ncb.ncb_retcode);
return false;
}
//Prepare to get the adapter status block
ZeroMemory(&Ncb,sizeof(Ncb));
Ncb.ncb_command = NCBASTAT;
Ncb.ncb_lana_num = adapter_num;
strcpy((char *) Ncb.ncb_callname, "*");
struct ASTAT
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff[30];
} Adapter;
ZeroMemory(&Adapter,sizeof(Adapter));
Ncb.ncb_buffer = (unsigned char *)&Adapter;
Ncb.ncb_length = sizeof(Adapter);
// Get the adapter's info and, if this works, return it in standard,
// colon-delimited form.
if (Netbios(&Ncb) == 0)
{
char acMAC[18];
sprintf(acMAC, "%02X%02X%02X%02X%02X%02X",
int (Adapter.adapt.adapter_address[0]),
int (Adapter.adapt.adapter_address[1]),
int (Adapter.adapt.adapter_address[2]),
int (Adapter.adapt.adapter_address[3]),
int (Adapter.adapt.adapter_address[4]),
int (Adapter.adapt.adapter_address[5]));
mac_addr = acMAC;
return true;
}
else
{
mac_addr = "bad (NCBASTAT): ";
mac_addr +=AnsiString(Ncb.ncb_retcode);
return false;
}
}