October 23, 2018
Hot Topics:

IP Helper API: Retrieving Basic Information

  • September 10, 2004
  • By Alex Gusev
  • Send Email »
  • More Articles »

Getting the Adapter's Info

With the IP Helper API, you can manage network adapters. An adapter is a datalink-level abstraction for network stuff. Later in this article, you will find one more similar term—an interface, which is an IP-level abstraction.

There are several functions that provide all necessary information about adapters:

  • GetAdaptersInfo: Returns an array of IP_ADAPTER_INFO structures, one for each adapter
  • GetPerAdapterInfo: Returns additional information about a specific adapter in the IP_PER_ADAPTER_INFO struct
  • GetAdapterIndex: Returns the adapter index from the adapter name

The next code snippet shows how to obtain info about all available adapters:

void CNWParamsDlg::ShowAdapters(PIP_ADAPTER_INFO pAdapterInfo)
      m_ListBox.AddString(L"Adapter: " +
      m_ListBox.AddString(L"   Desc: " +

         CString strToChar;
         CString strCurrentMac;
         BYTE *pAddress = pAdapterInfo->Address;
         for(int nCount=0; nCount-pAdapterInfo->
            if ( nCount + 1 < pAdapterInfo->AddressLength )
               strCurrentMac += L":";
         m_ListBox.AddString(L"   MAC: " + strCurrentMac);
      pAdapterInfo = pAdapterInfo->Next;


void CNWParamsDlg::OnButtonAdapters()
   IP_ADAPTER_INFO *pAdapterInfo = NULL;
   ULONG ulBufLen = 0;
   int nErr = ERROR_SUCCESS;

   nErr = GetAdaptersInfo(pAdapterInfo,&ulBufLen);

   // If buffer size is smaller - allocate memory and try again
      pAdapterInfo = (IP_ADAPTER_INFO *)new char[ulBufLen];

      nErr = GetAdaptersInfo(pAdapterInfo,&ulBufLen);

      if( nErr == ERROR_SUCCESS )

This sample gives you a common example of IP Helper API data structures. Most of them contain a linked list of the same structs, so you should iterate through it to get desired info. The IP_ADAPTER_INFO struct keeps details about various network parameters per specific adapter; for example, WINS, Gateway, DHCP, and so on:

typedef struct _IP_ADAPTER_INFO {
   struct _IP_ADAPTER_INFO* Next;
   DWORD ComboIndex;
   char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
   char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
   UINT AddressLength;
   DWORD Index;
   UINT Type;
   UINT DhcpEnabled;
   PIP_ADDR_STRING CurrentIpAddress;
   IP_ADDR_STRING IpAddressList;
   IP_ADDR_STRING GatewayList;
   IP_ADDR_STRING DhcpServer;
   BOOL HaveWins;
   IP_ADDR_STRING PrimaryWinsServer;
   IP_ADDR_STRING SecondaryWinsServer;
   time_t LeaseObtained;
   time_t LeaseExpires;

The sample above displays only a small part of the available information: name, description, and MAC address. The last one may be useful to identify a specific device because a MAC address is a unique number. Let me leave all the rest of this type of API calls for you to play with.

Page 2 of 3

Comment and Contribute


(Maximum characters: 1200). You have characters left.



Enterprise Development Update

Don't miss an article. Subscribe to our newsletter below.

By submitting your information, you agree that developer.com may send you developer offers via email, phone and text message, as well as email offers about other products and services that developer believes may be of interest to you. developer will process your information in accordance with the Quinstreet Privacy Policy.


Thanks for your registration, follow us on our social networks to keep up-to-date