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

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值