c++winapiethernetmac-address

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


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


Solution

  • 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;
    }