15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Функция GetAdaptersInfo.

Функция GetNetworkParams позволяет узнать сетевые настройки сетевой карты локального компьютера.

Внимание: Для использования этой функции необходимо, чтобы был установлен Platform SDK!

DWORD GetAdaptersInfo(
  PIP_ADAPTER_INFO pAdapterInfo,
  PULONG pOutBufLen
);

Параметры

pAdapterInfo
Указатель на буфер, в который записывается список структур IP_ADAPTER_INFO.
pOutBufLen
Указатель на переменную ULONG, которая содержит размер, требуемый для буфера pAdapterInfo. Если этого размера недостаточно для хранения информации, то GetAdaptersInfo заносит в эту переменную требуемый размер, и возвращает код ошибки ERROR_BUFFER_OVERFLOW.

Возвращаемые значения

В случае успеха, функция вернёт ERROR_SUCCESS.

В случае ошибки, функция вернёт одно из следующих значений:

 

Значение Описание
ERROR_BUFFER_OVERFLOW Размер буфера, указанный в переменной pOutBufLen недостаточен для хранения информации. Параметр pOutBufLen указывает на требуемый размер.
ERROR_INVALID_PARAMETER Параметр pOutBufLen равен NULL, либо вызывающий процесс не имеет прав на запись/чтение в памяти по адресу pOutBufLen, либо вызывающий процесс не имеет прав на запись в памяти по адресу pAdapterInfo.
ERROR_NO_DATA No adapter information exists for the local computer.
ERROR_NOT_SUPPORTED GetAdaptersInfo не поддерживается данной операционной системой.
другое В случае ошибки, воспользуйтесь функцией FormatMessage для получения подробной строки об ошибке.


Замечания

Функции GetAdaptersInfo и GetInterfaceInfo не возвращают информации об интерфейсе нулевого кольца (loopback interface).

Пример использования

#include <stdio.h>
#include <windows.h>
#include <iphlpapi.h>

main() {
   
   IP_ADAPTER_INFO * AdapterInfo;
   ULONG    ulOutBufLen;
   DWORD    dwRetVal;
   IP_ADDR_STRING * pIPAddr;

 AdapterInfo = (IP_ADAPTER_INFO *) GlobalAlloc(GPTR,sizeof(IP_ADAPTER_INFO));
 ulOutBufLen = sizeof(IP_ADAPTER_INFO);
   
   if( ERROR_BUFFER_OVERFLOW == GetAdaptersInfo(AdapterInfo, &ulOutBufLen)) {
      GlobalFree( AdapterInfo );
      AdapterInfo = (IP_ADAPTER_INFO *) GlobalAlloc(GPTR, ulOutBufLen );
   }

   if ( dwRetVal = GetAdaptersInfo( AdapterInfo, &ulOutBufLen ) ) {
    printf("Call to GetAdaptersInfo failed. Return Value: %08x\n", dwRetVal);
   }
   else {
      printf("Adapter Description: %s\n", AdapterInfo->Description);

      printf("IP Address(s):\n" );
      printf("\t%s\n", AdapterInfo->IpAddressList.IpAddress.String );
      
      pIPAddr = AdapterInfo->IpAddressList.Next;
      while (pIPAddr) {
         printf("\t%s\n", pIPAddr->IpAddress.String);
         pIPAddr = pIPAddr->Next;
      }

	  printf("Default gateway(s):\n" );
      printf("\t%s\n", AdapterInfo->GatewayList.IpAddress.String );
      
      pIPAddr = AdapterInfo->GatewayList.Next;
      while ( pIPAddr ) {
         printf( "\t%s\n", pIPAddr ->IpAddress.String );
         pIPAddr = pIPAddr ->Next;
      }

	  if(AdapterInfo->DhcpEnabled == 1) {
		 printf("DHCP Server(s):\n" );
		 printf("\t%s\n", AdapterInfo->DhcpServer.IpAddress.String );
      
		 pIPAddr = AdapterInfo->DhcpServer.Next;
		 while ( pIPAddr ) {
			printf( "\t%s\n", pIPAddr ->IpAddress.String );
			pIPAddr = pIPAddr ->Next;
		 }
	  }
	  else {
		 printf("DHCP Disabled\n");
	  }

	  if(AdapterInfo->HaveWins == TRUE) {
		 printf("Primary WINS Server(s):\n" );
		 printf("\t%s\n", AdapterInfo->PrimaryWinsServer.IpAddress.String );
      
		 pIPAddr = AdapterInfo->PrimaryWinsServer.Next;
		 while ( pIPAddr ) {
			printf( "\t%s\n", pIPAddr ->IpAddress.String );
			pIPAddr = pIPAddr ->Next;
		 }
	  }
	  else {
		  printf("Adapter not used WINS servers\n" );
	  }
   }
   exit( 0 );
}

 

Дополнительная информация

Windows NT/2000/XP: Включена в Windows 2000 и выше.
Windows 95/98/Me: Включена в Windows 98 и выше.
Заголовок: Объявлена в Iphlpapi.h.
Библиотека: Iphlpapi.lib.