以前用WDK获取一些硬件信息,但是有些需要管理员权限,比较尴尬。谁都不喜欢多弹一个对话框。
现在又因为需要获取mac地址,在网上收集了一下方法,还是有一些方法。使用过其中两三种,比较推荐如下:(个人在vc2010下使用的)原因是,存在虚拟机时,其他方法往往不能获取真实mac地址,而是虚拟机的。下面方法能比较准确的获取真实物理网卡地址。当然,我没测试多个物理网卡情况。
#include <iphlpapi.h>
#pragma comment(lib, "iphlpapi.lib ")
BOOL GetMacAddress(CString &strMac)
{
PIP_ADAPTER_INFO pAdapterInfo;
DWORD AdapterInfoSize;
TCHAR szMac[32] = {0};
DWORD Err;
AdapterInfoSize = 0;
Err = GetAdaptersInfo(NULL, &AdapterInfoSize);
if((Err != 0) && (Err != ERROR_BUFFER_OVERFLOW))
{
TRACE("获得网卡信息失败!");
return FALSE;
}
// 分配网卡信息内存
pAdapterInfo = (PIP_ADAPTER_INFO) GlobalAlloc(GPTR, AdapterInfoSize);
if(pAdapterInfo == NULL)
{
TRACE("分配网卡信息内存失败");
return FALSE;
}
if(GetAdaptersInfo(pAdapterInfo, &AdapterInfoSize) != 0)
{
TRACE(_T("获得网卡信息失败!\n"));
GlobalFree(pAdapterInfo);
return FALSE;
}
strMac.Format(_T("%02X-%02X-%02X-%02X-%02X-%02X"),
pAdapterInfo->Address[0],
pAdapterInfo->Address[1],
pAdapterInfo->Address[2],
pAdapterInfo->Address[3],
pAdapterInfo->Address[4],
pAdapterInfo->Address[5]);
GlobalFree(pAdapterInfo);
return TRUE;
}
同时附上另一个网址,WDK方法:http://blog.youkuaiyun.com/jhqin/article/details/5618667