获取本机物理网卡,排除虚拟机

来源:互联网 发布:数据分析师cda要多少钱 编辑:程序博客网 时间:2024/05/21 19:00
BOOL IsLocalAdapter(char *pAdapterName)
{
const char NET_CARD_KEY[] = "System\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}";
BOOL ret_value = FALSE;
char szDataBuf[MAX_PATH + 1];
DWORD dwDataLen = MAX_PATH;
DWORD dwType = REG_SZ;
HKEY hNetKey = NULL;
HKEY hLocalNet = NULL;


if(ERROR_SUCCESS == RegOpenKeyExA(HKEY_LOCAL_MACHINE, NET_CARD_KEY, 0, KEY_READ, &hNetKey))
{
sprintf(szDataBuf, "%s\\Connection", pAdapterName);
if(ERROR_SUCCESS == RegOpenKeyExA(hNetKey ,szDataBuf ,0 ,KEY_READ, &hLocalNet))
{
if (ERROR_SUCCESS == RegQueryValueExA(hLocalNet, "PnpInstanceID", 0, &dwType, (BYTE *)szDataBuf, &dwDataLen)
&& !strncmp(szDataBuf, "PCI\\", strlen("PCI\\")))
{
ret_value = TRUE;
}
}
}


if (hLocalNet)
{
RegCloseKey(hLocalNet);
}
if (hNetKey)
{
RegCloseKey(hNetKey);
}
return ret_value;
}




BOOL GetLocalMAC(CString &localMAC)
{
IP_ADAPTER_INFO *IpAdaptersInfo =NULL;
IP_ADAPTER_INFO *IpAdaptersInfoHead =NULL;
char MAC[128];


IpAdaptersInfo = (IP_ADAPTER_INFO *) GlobalAlloc(GPTR, sizeof(IP_ADAPTER_INFO ));
if (IpAdaptersInfo == NULL)
{
return FALSE;
}


DWORD dwDataSize = sizeof( IP_ADAPTER_INFO );
DWORD dwRetVal = GetAdaptersInfo(IpAdaptersInfo,&dwDataSize);


if ( ERROR_SUCCESS != dwRetVal && ERROR_BUFFER_OVERFLOW == dwRetVal)
{
GlobalFree(IpAdaptersInfo);
IpAdaptersInfo =(IP_ADAPTER_INFO *) GlobalAlloc( GPTR, dwDataSize );
if (IpAdaptersInfo == NULL)
{
return FALSE;
}
if ( ERROR_SUCCESS != GetAdaptersInfo( IpAdaptersInfo, &dwDataSize ))
{
GlobalFree( IpAdaptersInfo );
return FALSE;
}
}


//Save the head pointer of IP_ADAPTER_INFO structures list.
IpAdaptersInfoHead = IpAdaptersInfo;


while (IpAdaptersInfo)
{
if (IsLocalAdapter(IpAdaptersInfo->AdapterName))
{
sprintf(MAC,"%02x%02x%02x%02x%02x%02x",
IpAdaptersInfo->Address[0],
IpAdaptersInfo->Address[1],
IpAdaptersInfo->Address[2],
IpAdaptersInfo->Address[3],
IpAdaptersInfo->Address[4],
IpAdaptersInfo->Address[5]);
//printf("%s\n",MAC);
localMAC = CA2T(MAC);
break;
}
IpAdaptersInfo = IpAdaptersInfo->Next;
}


GlobalFree( IpAdaptersInfoHead );
return TRUE;
}
原创粉丝点击