How to enumerate network adapters and get their MAC addresses in Win32 API C++?

前端 未结 1 1599
梦如初夏
梦如初夏 2020-12-31 06:04

How do I enumerate network adapters and get their MAC addresses in Win32 API C++?

相关标签:
1条回答
  • 2020-12-31 06:20

    This code should work:

    {
        ULONG outBufLen = 0;
        DWORD dwRetVal = 0;
        IP_ADAPTER_INFO* pAdapterInfos = (IP_ADAPTER_INFO*) malloc(sizeof(IP_ADAPTER_INFO));
    
        // retry up to 5 times, to get the adapter infos needed
        for( int i = 0; i < 5 && (dwRetVal == ERROR_BUFFER_OVERFLOW || dwRetVal == NO_ERROR); ++i )
        {
            dwRetVal = GetAdaptersInfo(pAdapterInfos, &outBufLen);
            if( dwRetVal == NO_ERROR )
            {
                break;
            }
            else if( dwRetVal == ERROR_BUFFER_OVERFLOW )
            {
                free(pAdapterInfos);
                pAdapterInfos = (IP_ADAPTER_INFO*) malloc(outBufLen);
            }
            else
            {
                pAdapterInfos = 0;
                break;
            }
        }
        if( dwRetVal == NO_ERROR )
        {
            IP_ADAPTER_INFO* pAdapterInfo = pAdapterInfos;
            while( pAdapterInfo )
            {
                IP_ADDR_STRING* pIpAddress = &(pAdapterInfo->IpAddressList);
                while( pIpAddress != 0 )
                {
                              // 
                              // <<<<
                              // here pAdapterInfo->Address should contain the MAC address
                              // >>>>
                              // 
    
                    pIpAddress = pIpAddress->Next;
                }
                pAdapterInfo = pAdapterInfo->Next;
            }
        }
        free(pAdapterInfos);
        return false;
    }
    
    0 讨论(0)
提交回复
热议问题