#include "stdafx.h"
#include "MACAddress.h"
using namespace std;
int main()
{
char out[200] = {0};
Mac mac;
printf("%x\n",mac.GetMACAddress(out));
//GetMACAddress(out);
char* buffer = out;
while(strlen(buffer) != 0)
{
printf("MAC address : %s\n", buffer);
buffer += strlen(buffer)+1;
}
system("pause");
return 0;
}
PIP_ADAPTER_INFO Mac::GetAdapterInfo()
{
PIP_ADAPTER_INFO adapterInfo = new IP_ADAPTER_INFO();
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
int nRel = GetAdaptersInfo(adapterInfo,&stSize);
if (ERROR_NO_DATA == nRel)
{
return NULL;
}
if (ERROR_BUFFER_OVERFLOW==nRel)
{
DestroyAdapterInfo(adapterInfo);
adapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
nRel=GetAdaptersInfo(adapterInfo,&stSize);
}
if (ERROR_SUCCESS != nRel)
{
DestroyAdapterInfo(adapterInfo);
return NULL;
}
return adapterInfo;
}
void Mac::DestroyAdapterInfo(PIP_ADAPTER_INFO adapterInfo)
{
if (adapterInfo)
{
delete adapterInfo;
}
}
int Mac::GetMACAddress(char* out)
{
PIP_ADAPTER_INFO adapterInfo = GetAdapterInfo();
if (adapterInfo == NULL)
{
return -1;
}
char adapterName[600] = {0};
GetPhysicsAdapterName(adapterName);
int macNumber = 0;
while (adapterInfo && adapterInfo->Type != 71)
{
char* buffer = adapterName;
while(strlen(buffer) != 0)
{
if (memcmp(adapterInfo->AdapterName, buffer, sizeof(buffer)) == NULL)
{
for (UINT i = 0; i < adapterInfo->AddressLength; i++)
{
if (i == adapterInfo->AddressLength-1)
{
sprintf(out + macNumber * 18 + 3*i, "%02x\0", adapterInfo->Address[i]);
}
else
{
sprintf(out + macNumber * 18 + 3*i, "%02x-", adapterInfo->Address[i]);
}
}
macNumber++;
break;
}
buffer += strlen(buffer)+1;
}
adapterInfo = adapterInfo->Next;
}
DestroyAdapterInfo(adapterInfo);
return 0;
}
void Mac::GetPhysicsAdapterName(char* adapterName)
{
HKEY m_key,m_key2;
LPTSTR m_SubKey = "SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002bE10318}\\";
_TCHAR m_name[200]={0},m_childName[200]={0},m_KeyName[200]={0};
DWORD m_namelen=200;
DWORD mIndex=0;
DWORD m_KeyNamelen=200;
DWORD m_keyType = 0;
DWORD dwDataLen = 4;
DWORD m_attr=REG_BINARY|REG_DWORD|REG_EXPAND_SZ|REG_MULTI_SZ|REG_NONE|REG_SZ;
int index = 0;
long ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,m_SubKey,0,KEY_ALL_ACCESS,&m_key);
if(ret==ERROR_SUCCESS)
{
while(RegEnumKeyEx(m_key,mIndex,m_name,&m_namelen,0,NULL,NULL,0)!=ERROR_NO_MORE_ITEMS)
{
mIndex++;
if (strcmp(m_name, "") != NULL)
{
strcpy(m_childName,m_SubKey);
strcat(m_childName,m_name);
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,m_childName,0,KEY_ALL_ACCESS,&m_key2)==ERROR_SUCCESS)
{
ret = RegQueryValueEx(m_key2,"Characteristics",0,&m_attr,(BYTE *)&m_keyType,&dwDataLen);
if ((m_keyType & 0x04) == 0x04)
{
RegQueryValueEx(m_key2,"NetCfgInstanceId",0,&m_attr,LPBYTE(m_KeyName),&m_KeyNamelen);
sprintf(adapterName + index,"%s",m_KeyName);
index += m_KeyNamelen;
}
}
RegCloseKey(m_key2);
m_KeyNamelen = 200;
memset(m_KeyName,0,sizeof(m_KeyName));
}
m_namelen=200;
memset(m_name,0,sizeof(m_name));
}
}
RegCloseKey(m_key);
}
评论7
最新资源