您的位置:首页 > 其它

获取本机MAC地址

2014-10-15 11:04 155 查看
主要还是参考MSDN关于IP_ADAPTER_INFO的描述:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366062%28v=vs.85%29.aspx
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "IPHLPAPI.lib")

#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))

int GetMacAddress(char *pMacAddr)
{
unsigned char pMac[6];
PIP_ADAPTER_INFO pAdapterInfo = NULL;
ULONG uLong = sizeof (IP_ADAPTER_INFO);
int ret = -1;

ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(sizeof (IP_ADAPTER_INFO));
if (pAdapterInfo == NULL) {
TRACE("Error allocating memory needed to call GetAdaptersinfo\n");
return 1;
}

  // Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
FREE(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
if (pAdapterInfo == NULL) {
TRACE("Error allocating memory needed to call GetAdaptersinfo\n");
return 1;
}
}

if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) != NO_ERROR)
{
goto EXIT;
}

if(NULL == pAdapterInfo)
{
goto EXIT;
}

ret = 0;
sprintf(pMacAddr, "%02X:%02X:%02X:%02X:%02X:%02X",
pAdapterInfo->Address[0], pAdapterInfo->Address[1], pAdapterInfo->Address[2],
pAdapterInfo->Address[3], pAdapterInfo->Address[4], pAdapterInfo->Address[5]);

EXIT:
if (NULL != pAdapterInfo)
{
FREE(pAdapterInfo);
}

return ret;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: