1. 程式人生 > >獲取網卡地址

獲取網卡地址

pmac 卡號 true ram init bios orm body eset

如何獲取網卡地址(MAC地址):

VC++編寫的代碼,適用於windows環境,API實現

/*char *pMACAdr,返回網卡地址的buff,

int *nBuffLen前一個參數的長度,

int nAdapterID = 0網卡號,針對多網卡問題,有的機器不止一個網卡,默認為0

*/

#include <NB30.H>
#pragma comment(lib, "C:\\Program Files\\Microsoft Visual Studio\\VC98\\Lib\\Netapi32.lib")//自己找安裝目錄

BOOL GetMACAdress(char *pMACAdr, int *nBuffLen, int nAdapterID = 0)

{
if (NULL == pMACAdr || *nBuffLen <= 0 || nAdapterID < 0) {
*nBuffLen = 0;
return FALSE;
}
memset(pMACAdr, 0, *nBuffLen);

typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, *PASTAT;

NCB ncb;
UCHAR uRetCode;
ASTAT Adapter;

memset(&ncb, 0, sizeof(ncb));

ncb.ncb_command = NCBRESET;
//網卡序號,一般從0開始
ncb.ncb_lana_num = nAdapterID;

//send one NCBRESET command to the adapter car, for initialzing
uRetCode = Netbios(&ncb);
memset(&ncb, 0, sizeof(ncb));
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = nAdapterID;//specify the adapter car ID

strcpy((char*)ncb.ncb_callname, "* ");
ncb.ncb_buffer = (PUCHAR)&Adapter;
ncb.ncb_length = sizeof(Adapter);

//send the NCBRESET command to get the adapter car msg
uRetCode = Netbios(&ncb);
CString szMacAdr;
if(0 == uRetCode) { //獲得網卡信息成功
szMacAdr.Format("%02X%02X-%02X%02X-%02X%02X",
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5]
);
}
if (szMacAdr.IsEmpty()) {
*nBuffLen = 0;
return FALSE;
}
else{
int nMacLen = szMacAdr.GetLength();
*nBuffLen = nMacLen <= *nBuffLen ? nMacLen : *nBuffLen;
memcpy(pMACAdr, szMacAdr.GetBuffer(*nBuffLen), *nBuffLen);
return TRUE;
}
}

如果想現存的DLL或者ActiveX控制, 在我的資源裏有封裝好的DLL與ActiveX控制下載, 直接調用接口使用即可

獲取網卡地址