Lau*_*aur 11 c++ mac-address windows-vista
我们目前正在使用NetBios方法,它在XP下运行正常.Vista下的初步测试表明它也有效,但有一些警告 - 例如,NetBIOS必须存在,而且从我读过的内容来看,适配器的顺序必将发生变化.我们的替代方法 - 使用SNMPExtensionQuery - 似乎在Vista下被打破了.
问题是:您是否知道在Vista计算机上获取本地MAC地址列表的可靠方法?向后兼容XP是一个优点(我宁愿使用一个单一的方法,而不是许多丑陋的#ifdef).谢谢!
Bri*_*ndy 19
这将为您提供计算机上所有MAC地址的列表.它也适用于所有版本的Windows:
void getdMacAddresses(std::vector<std::string> &vMacAddresses;)
{
vMacAddresses.clear();
IP_ADAPTER_INFO AdapterInfo[32]; // Allocate information for up to 32 NICs
DWORD dwBufLen = sizeof(AdapterInfo); // Save memory size of buffer
DWORD dwStatus = GetAdaptersInfo( // Call GetAdapterInfo
AdapterInfo, // [out] buffer to receive data
&dwBufLen); // [in] size of receive data buffer
//No network card? Other error?
if(dwStatus != ERROR_SUCCESS)
return;
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
char szBuffer[512];
while(pAdapterInfo)
{
if(pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET)
{
sprintf_s(szBuffer, sizeof(szBuffer), "%.2x-%.2x-%.2x-%.2x-%.2x-%.2x"
, pAdapterInfo->Address[0]
, pAdapterInfo->Address[1]
, pAdapterInfo->Address[2]
, pAdapterInfo->Address[3]
, pAdapterInfo->Address[4]
, pAdapterInfo->Address[5]
);
vMacAddresses.push_back(szBuffer);
}
pAdapterInfo = pAdapterInfo->Next;
}
}
Run Code Online (Sandbox Code Playgroud)