структура IP_ADAPTER_ADDRESSES_LH (iptypes.h)

Структура IP_ADAPTER_ADDRESSES — это узел заголовка для связанного списка адресов для конкретного адаптера. Эту структуру можно одновременно использовать как часть связанного списка IP_ADAPTER_ADDRESSES структур.

Синтаксис

typedef struct _IP_ADAPTER_ADDRESSES_LH {
  union {
    ULONGLONG Alignment;
    struct {
      ULONG    Length;
      IF_INDEX IfIndex;
    };
  };
  struct _IP_ADAPTER_ADDRESSES_LH    *Next;
  PCHAR                              AdapterName;
  PIP_ADAPTER_UNICAST_ADDRESS_LH     FirstUnicastAddress;
  PIP_ADAPTER_ANYCAST_ADDRESS_XP     FirstAnycastAddress;
  PIP_ADAPTER_MULTICAST_ADDRESS_XP   FirstMulticastAddress;
  PIP_ADAPTER_DNS_SERVER_ADDRESS_XP  FirstDnsServerAddress;
  PWCHAR                             DnsSuffix;
  PWCHAR                             Description;
  PWCHAR                             FriendlyName;
  BYTE                               PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
  ULONG                              PhysicalAddressLength;
  union {
    ULONG Flags;
    struct {
      ULONG DdnsEnabled : 1;
      ULONG RegisterAdapterSuffix : 1;
      ULONG Dhcpv4Enabled : 1;
      ULONG ReceiveOnly : 1;
      ULONG NoMulticast : 1;
      ULONG Ipv6OtherStatefulConfig : 1;
      ULONG NetbiosOverTcpipEnabled : 1;
      ULONG Ipv4Enabled : 1;
      ULONG Ipv6Enabled : 1;
      ULONG Ipv6ManagedAddressConfigurationSupported : 1;
    };
  };
  ULONG                              Mtu;
  IFTYPE                             IfType;
  IF_OPER_STATUS                     OperStatus;
  IF_INDEX                           Ipv6IfIndex;
  ULONG                              ZoneIndices[16];
  PIP_ADAPTER_PREFIX_XP              FirstPrefix;
  ULONG64                            TransmitLinkSpeed;
  ULONG64                            ReceiveLinkSpeed;
  PIP_ADAPTER_WINS_SERVER_ADDRESS_LH FirstWinsServerAddress;
  PIP_ADAPTER_GATEWAY_ADDRESS_LH     FirstGatewayAddress;
  ULONG                              Ipv4Metric;
  ULONG                              Ipv6Metric;
  IF_LUID                            Luid;
  SOCKET_ADDRESS                     Dhcpv4Server;
  NET_IF_COMPARTMENT_ID              CompartmentId;
  NET_IF_NETWORK_GUID                NetworkGuid;
  NET_IF_CONNECTION_TYPE             ConnectionType;
  TUNNEL_TYPE                        TunnelType;
  SOCKET_ADDRESS                     Dhcpv6Server;
  BYTE                               Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH];
  ULONG                              Dhcpv6ClientDuidLength;
  ULONG                              Dhcpv6Iaid;
  PIP_ADAPTER_DNS_SUFFIX             FirstDnsSuffix;
} IP_ADAPTER_ADDRESSES_LH, *PIP_ADAPTER_ADDRESSES_LH;

Члены

Alignment

Тип: ULONGLONGLONG

Зарезервировано. Используется компилятором для выравнивания структуры.

Length

Тип: ULONG

Длина этой структуры (в байтах). Обратите внимание, что длина структуры IP_ADAPTER_ADDRESSES изменилась в Windows XP с пакетом обновления 1 (SP1) и более поздних версий, а также в Windows Vista и более поздних версиях.

IfIndex

Тип: DWORD

Индекс интерфейса IPv4, с которым связаны эти адреса. В Windows Server 2003 и Windows XP этот член равен нулю, если протокол IPv4 недоступен в интерфейсе.

Next

Тип: struct _IP_ADAPTER_ADDRESSES*

Указатель на следующий адаптер адресует структуру в списке.

AdapterName

Тип: PCHAR

Массив символов, содержащий имя адаптера, с которым связаны эти адреса. В отличие от понятного имени адаптера, имя адаптера, указанное в параметре AdapterName , является постоянным и не может быть изменено пользователем.

FirstUnicastAddress

Тип: PIP_ADAPTER_UNICAST_ADDRESS

Указатель на первую структуру IP_ADAPTER_UNICAST_ADDRESS в связанном списке одноадресных IP-адресов для адаптера.

FirstAnycastAddress

Тип: PIP_ADAPTER_ANYCAST_ADDRESS

Указатель на первую структуру IP_ADAPTER_ANYCAST_ADDRESS в связанном списке IP-адресов anycast для адаптера.

FirstMulticastAddress

Тип: PIP_ADAPTER_MULTICAST_ADDRESS

Указатель на первую структуру IP_ADAPTER_MULTICAST_ADDRESS в списке IP-адресов многоадресной рассылки для адаптера.

FirstDnsServerAddress

Тип: PIP_ADAPTER_DNS_SERVER_ADDRESS

Указатель на первую структуру IP_ADAPTER_DNS_SERVER_ADDRESS в связанном списке адресов DNS-серверов для адаптера.

DnsSuffix

Тип: PWCHAR

Dns-суффикс, связанный с этим адаптером.

Description

Тип: PWCHAR

Описание адаптера. Этот элемент доступен только для чтения.

FriendlyName

Тип: PWCHAR

Понятное имя адаптера. Например: "Подключение по локальной сети 1". Это имя отображается в контекстах, таких как программа командной строки ipconfig и папка Connection. Этот элемент доступен только для чтения и не может быть изменен с помощью вспомогательных функций IP-адресов.

Этот элемент является полем ifAlias, используемым NDIS, как описано в RFC 2863. Поле ifAlias может быть задано поставщиком интерфейса NDIS при установке драйвера NDIS. Для драйверов мини-порта NDIS это поле задается с помощью NDIS.

PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]

Тип: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]

Mac-адрес контроль доступа мультимедиа для адаптера. Например, в сети Ethernet этот член будет указывать аппаратный адрес Ethernet.

PhysicalAddressLength

Тип: DWORD

Длина (в байтах) адреса, указанного в элементе PhysicalAddress . Для интерфейсов, у которых нет уровня канала данных, это значение равно нулю.

Flags

Тип: DWORD

Набор флагов, определяющих различные параметры адаптера. Эти значения определяются в файле заголовка Iptypes.h . Возможны сочетания этих битов флагов.

Flag Значение
IP_ADAPTER_DDNS_ENABLED
0x0001
На этом адаптере включена динамическая служба DNS.
IP_ADAPTER_REGISTER_ADAPTER_SUFFIX
0x0002
Зарегистрируйте DNS-суффикс для этого адаптера.
IP_ADAPTER_DHCP_ENABLED
0x0004
На этом адаптере включен протокол DHCP.
IP_ADAPTER_RECEIVE_ONLY
0x0008
Адаптер является адаптером только для получения.
IP_ADAPTER_NO_MULTICAST
0x0010
Адаптер не является получателем многоадресной рассылки.
IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG
0x0020
Адаптер содержит другие сведения о конфигурации с отслеживанием состояния для IPv6.
IP_ADAPTER_NETBIOS_OVER_TCPIP_ENABLED
0x0040
Адаптер включен для NetBIOS через TCP/IP.
Примечание Этот флаг поддерживается только в Windows Vista и более поздних версиях, если приложение было скомпилировано для целевой платформы с версией NTDDI, равной или больше NTDDI_LONGHORN. Этот флаг определен в структуре IP_ADAPTER_ADDRESSES_LH как битовое поле NetbiosOverTcpipEnabled .
 
IP_ADAPTER_IPV4_ENABLED
0x0080
Адаптер включен для IPv4.
Примечание Этот флаг поддерживается только в Windows Vista и более поздних версиях, если приложение было скомпилировано для целевой платформы с версией NTDDI, равной или больше NTDDI_LONGHORN. Этот флаг определен в структуре IP_ADAPTER_ADDRESSES_LH как битовое поле Ipv4Enabled .
 
IP_ADAPTER_IPV6_ENABLED
0x0100
Адаптер включен для IPv6.
Примечание Этот флаг поддерживается только в Windows Vista и более поздних версиях, если приложение было скомпилировано для целевой платформы с версией NTDDI, равной или больше NTDDI_LONGHORN. Этот флаг определен в структуре IP_ADAPTER_ADDRESSES_LH как битовое поле Ipv6Enabled .
 
IP_ADAPTER_IPV6_MANAGE_ADDRESS_CONFIG
0x0200
Адаптер включен для конфигурации управляемого адреса IPv6.
Примечание Этот флаг поддерживается только в Windows Vista и более поздних версиях, если приложение было скомпилировано для целевой платформы с версией NTDDI, равной или больше NTDDI_LONGHORN. Этот флаг определен в структуре IP_ADAPTER_ADDRESSES_LH как битовое поле Ipv6ManagedAddressConfigurationSupported .
 

DdnsEnabled

RegisterAdapterSuffix

Dhcpv4Enabled

ReceiveOnly

NoMulticast

Ipv6OtherStatefulConfig

NetbiosOverTcpipEnabled

Ipv4Enabled

Ipv6Enabled

Ipv6ManagedAddressConfigurationSupported

Mtu

Тип: DWORD

Максимальный размер единицы передачи (MTU) в байтах.

IfType

Тип: DWORD

Тип интерфейса, определенный центром имен, назначенных Через Интернет (IANA). Возможные значения для типа интерфейса перечислены в файле заголовка Ipifcons.h .

В приведенной ниже таблице перечислены общие значения для типа интерфейса, хотя возможны и многие другие значения.

Значение Значение
IF_TYPE_OTHER
1
Другой тип сетевого интерфейса.
IF_TYPE_ETHERNET_CSMACD
6
Сетевой интерфейс Ethernet.
IF_TYPE_ISO88025_TOKENRING
9
Сетевой интерфейс круга маркеров.
IF_TYPE_PPP
23
Сетевой интерфейс PPP.
IF_TYPE_SOFTWARE_LOOPBACK
24
Программный сетевой интерфейс замыкания на себя.
IF_TYPE_ATM
37
Сетевой интерфейс ATM.
IF_TYPE_IEEE80211
71
Беспроводной сетевой интерфейс IEEE 802.11.

В Windows Vista и более поздних версиях беспроводные сетевые карты отображаются как IF_TYPE_IEEE80211. В более ранних версиях Windows беспроводные сетевые карты отображаются как IF_TYPE_ETHERNET_CSMACD.

В Windows XP с пакетом обновления 3 (SP3) и Windows XP с пакетом обновления 2 (SP2) x86 с api беспроводной локальной сети для Windows XP с пакетом обновления 2 (SP2) функцию WlanEnumInterfaces можно использовать для перечисления беспроводных интерфейсов на локальном компьютере.

IF_TYPE_TUNNEL
131
Сетевой интерфейс инкапсуляции типа туннеля.
IF_TYPE_IEEE1394
144
Высокопроизводительный сетевой интерфейс последовательной шины IEEE 1394 (Firewire).

OperStatus

Тип: IF_OPER_STATUS

Рабочее состояние интерфейса, определенное в RFC 2863. Для получения дополнительной информации см. http://www.ietf.org/rfc/rfc2863.txt. Этот член может быть одним из значений из типа перечисления IF_OPER_STATUS , определенного в файле заголовка Iftypes.h . В Windows Vista и более поздних версиях файлы заголовков были реорганизованы, и это перечисление определено в файле заголовка Ifdef.h .

Значение Значение
IfOperStatusUp
1
Интерфейс работает и может передавать пакеты.
IfOperStatusDown
2
Интерфейс не работает и не находится в состоянии для передачи пакетов. Состояние IfOperStatusDown имеет два значения в зависимости от значения элемента AdminStatus . Если параметр AdminStatus не имеет значение NET_IF_ADMIN_STATUS_DOWN а параметрOperStatus имеет значение IfOperStatusDown , предполагается, что в интерфейсе существует условие сбоя. Если параметр AdminStatus имеет значение IfOperStatusDown, то значение ifOperStatus обычно также имеет значение IfOperStatusDown или IfOperStatusNotPresent , и в интерфейсе не обязательно есть условие сбоя.
IfOperStatusTesting
3
Интерфейс находится в режиме тестирования.
IfOperStatusUnknown
4
Рабочее состояние интерфейса неизвестно.
IfOperStatusDormant
5
Интерфейс фактически не находится в состоянии передачи пакетов (он не работает), но находится в состоянии ожидания, ожидая какого-то внешнего события. Для интерфейсов по запросу это новое состояние определяет ситуацию, когда интерфейс ожидает событий, чтобы поместить его в состояние IfOperStatusUp .
IfOperStatusNotPresent
6
Уточнение состояния IfOperStatusDown , указывающее, что соответствующий интерфейс не работает, так как в управляемой системе отсутствует какой-либо компонент (обычно аппаратный компонент).
IfOperStatusLowerLayerDown
7
Уточнение состояния IfOperStatusDown . Это новое состояние указывает, что этот интерфейс выполняется поверх одного или нескольких других интерфейсов и что этот интерфейс не работает, так как один или несколько из этих интерфейсов нижнего уровня не работают.

Ipv6IfIndex

Тип: DWORD

Индекс интерфейса для IP-адреса IPv6. Этот член равен нулю, если протокол IPv6 недоступен в интерфейсе.

Примечание Этот элемент структуры доступен только в Windows XP с пакетом обновления 1 (SP1) и более поздних версий.
 

ZoneIndices[16]

Тип: DWORD[16]

Массив идентификаторов область для каждого уровня область, используемого для создания структур sockaddr. Перечисление SCOPE_LEVEL используется для индексирования массива. В IPv6 одному интерфейсу может быть назначено несколько адресов многоадресной рассылки IPv6 на основе идентификатора область.

Примечание Этот элемент структуры доступен только в Windows XP с пакетом обновления 1 (SP1) и более поздних версий.
 

FirstPrefix

Тип: PIP_ADAPTER_PREFIX

Указатель на первую структуру IP_ADAPTER_PREFIX в связанном списке префиксов IP-адаптера для адаптера.

Примечание Этот элемент структуры доступен только в Windows XP с пакетом обновления 1 (SP1) и более поздних версий.
 

TransmitLinkSpeed

Тип: ULONG64

Текущая скорость в битах в секунду канала передачи для адаптера.

Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях.
 

ReceiveLinkSpeed

Тип: ULONG64

Текущая скорость в битах в секунду канала приема для адаптера.

Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях.
 

FirstWinsServerAddress

Тип: PIP_ADAPTER_WINS_SERVER_ADDRESS_LH

Указатель на первую структуру IP_ADAPTER_WINS_SERVER_ADDRESS в связанном списке адресов серверов WINS для адаптера.

Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях.
 

FirstGatewayAddress

Тип: PIP_ADAPTER_GATEWAY_ADDRESS_LH

Указатель на первую структуру IP_ADAPTER_GATEWAY_ADDRESS в связанном списке шлюзов для адаптера.

Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях.
 

Ipv4Metric

Тип: ULONG

Метрика интерфейса IPv4 для адреса адаптера. Этот элемент применим только к адресу адаптера IPv4.

Фактическая метрика маршрута, используемая для вычисления параметров маршрута для IPv4, представляет собой суммирование смещения метрики маршрута, указанного в элементе Метрикиструктуры MIB_IPFORWARD_ROW2 и метрики интерфейса, указанной в этом элементе для IPv4.

Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях.
 

Ipv6Metric

Тип: ULONG

Метрика интерфейса IPv6 для адреса адаптера. Этот элемент применим только к адресу адаптера IPv6.

Фактическая метрика маршрута, используемая для вычисления параметров маршрута для IPv6, представляет собой суммирование смещения метрики маршрута, указанного в элементе Метрикиструктуры MIB_IPFORWARD_ROW2 , и метрики интерфейса, указанной в этом элементе для IPv4.

Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях.
 

Luid

Тип: IF_LUID

LUID интерфейса для адреса адаптера.

Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях.
 

Dhcpv4Server

Тип: SOCKET_ADDRESS

IPv4-адрес DHCP-сервера для адреса адаптера. Этот элемент применим только к адресу адаптера IPv4, настроенного с помощью DHCP.

Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях.
 

CompartmentId

Тип: NET_IF_COMPARTMENT_ID

Идентификатор секции маршрутизации для адреса адаптера.

Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях. Этот член в настоящее время не поддерживается и зарезервирован для использования в будущем.
 

NetworkGuid

Тип: NET_IF_NETWORK_GUID

Идентификатор GUID, связанный с сетью, к которой принадлежит интерфейс.

Если поставщик интерфейса не может предоставить guid сети, этот элемент может быть нулевым GUID. В этом случае интерфейс был зарегистрирован NDIS в сети по умолчанию.

Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях.
 

ConnectionType

Тип: NET_IF_CONNECTION_TYPE

Тип подключения интерфейса для адреса адаптера.

Этот элемент может быть одним из значений из типа перечисления NET_IF_CONNECTION_TYPE , определенного в файле заголовка Ifdef.h .

Значение Значение
NET_IF_CONNECTION_DEDICATED
1
Тип подключения — выделенный. Соединение устанавливается автоматически, если значение мультимедиа имеет значение TRUE. Например, подключение Ethernet выделено.
NET_IF_CONNECTION_PASSIVE
2
Тип подключения — пассивный. Удаленный конец должен подключиться к локальной станции. Например, интерфейс RAS является пассивным.
NET_IF_CONNECTION_DEMAND
3
Тип подключения — demand-dial. Соединение этого типа возникает в ответ на локальное действие (например, отправка пакета).
NET_IF_CONNECTION_MAXIMUM
4
Максимально возможное значение для типа перечисления NET_IF_CONNECTION_TYPE . Это не является допустимым значением для члена ConnectionType .
 
Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях.
 

TunnelType

Тип: TUNNEL_TYPE

Метод инкапсуляции, используемый туннелем, если адрес адаптера является туннелем.

Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях.
 
Тип туннеля определяется центром назначенных Интернету имен (IANA). Для получения дополнительной информации см. http://www.iana.org/assignments/ianaiftype-mib. Этот элемент может быть одним из значений из типа перечисления TUNNEL_TYPE , определенного в файле заголовка Ifdef.h .
Значение Значение
TUNNEL_TYPE_NONE
0
Не туннель.
TUNNEL_TYPE_OTHER
1
Ни один из следующих типов туннелей.
TUNNEL_TYPE_DIRECT
2
Пакет инкапсулируется непосредственно в обычный IP-заголовок без промежуточного заголовка и одноадресной рассылки в конечную точку удаленного туннеля.
TUNNEL_TYPE_6TO4
11
Пакет IPv6 инкапсулируется непосредственно в заголовок IPv4 без промежуточного заголовка и одноадресной рассылки в назначение, определенное протоколом 6to4.
TUNNEL_TYPE_ISATAP
13
Пакет IPv6 инкапсулируется непосредственно в заголовок IPv4 без промежуточного заголовка и одноадресной рассылки в назначение, определенное протоколом ISATAP.
TUNNEL_TYPE_TEREDO
14
Инкапсуляция Teredo для пакетов IPv6.
TUNNEL_TYPE_IPHTTPS
15
Инкапсуляция IP-адресов через HTTPS для пакетов IPv6.
Примечание Это значение перечисления доступно только в Windows 7, Windows Server 2008 R2 и более поздних версиях.
 

Dhcpv6Server

Тип: SOCKET_ADDRESS

IPv6-адрес сервера DHCPv6 для адреса адаптера. Этот элемент применим только к адресу адаптера IPv6, настроенного с помощью DHCPv6. Этот элемент структуры в настоящее время не поддерживается и зарезервирован для использования в будущем.

Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях.
 

Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH]

Тип: BYTE[MAX_DHCPV6_DUID_LENGTH]

Уникальный идентификатор DHCP (DUID) для клиента DHCPv6. Этот элемент применим только к адресу адаптера IPv6, настроенного с помощью DHCPv6.

Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях.
 

Dhcpv6ClientDuidLength

Тип: ULONG

Длина (в байтах) уникального идентификатора DHCP (DUID) для клиента DHCPv6. Этот элемент применим только к адресу адаптера IPv6, настроенного с помощью DHCPv6.

Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях.
 

Dhcpv6Iaid

Тип: ULONG

Идентификатор для сопоставления удостоверений, выбранного клиентом DHCPv6. Этот элемент применим только к адресу адаптера IPv6, настроенного с помощью DHCPv6.

Примечание Этот элемент структуры доступен только в Windows Vista и более поздних версиях.
 

FirstDnsSuffix

Тип: PIP_ADAPTER_DNS_SUFFIX

Указатель на первую IP_ADAPTER_DNS_SUFFIX структуру в связанном списке DNS-суффиксов для адаптера.

Примечание Этот элемент структуры доступен только в Windows Vista с пакетом обновления 1 (SP1) и более поздних версий, а также в Windows Server 2008 и более поздних версиях.
 

Комментарии

Функция GetAdaptersAddresses извлекает сведения для адресов IPv4 и IPv6 и возвращает эти сведения в виде связанного списка IP_ADAPTER_ADDRESSES структур.

Значения индекса адаптера, указанные в элементах IfIndex и Ipv6IfIndex , могут изменяться при отключении адаптера, включении адаптера или при других обстоятельствах и не должны считаться постоянными.

Значения для элемента IfType определяются в файле заголовка Ipifcons.h . В настоящее время поддерживаются только возможные значения, перечисленные в описании элемента IfType .

Размер структуры IP_ADAPTER_ADDRESSES изменен в Windows XP с пакетом обновления 1 (SP1) и более поздних версий. Размер структуры IP_ADAPTER_ADDRESSES также изменился в Windows Vista и более поздних версиях. Размер структуры IP_ADAPTER_ADDRESSES также изменился в Windows Vista с пакетом обновления 1 (SP1) и более поздних версий, а также в Windows Server 2008 и более поздних версиях. Элемент Length следует использовать для определения используемой версии структуры IP_ADAPTER_ADDRESSES .

В версию структуры IP_ADAPTER_ADDRESSES в Windows XP с пакетом обновления 1 (SP1) и более поздних версий добавлены следующие новые элементы: Ipv6IfIndex, ZoneIndices и FirstPrefix.

В версию структуры IP_ADAPTER_ADDRESSES в Windows Vista и более поздних версиях добавлены следующие новые элементы: TransmitLinkSpeed, ReceiveLinkSpeed, FirstWinsServerAddress, FirstGatewayAddress, Ipv4Metric, Ipv6Metric, Luid, Dhcpv4Server, CompartmentId, NetworkGuid, ConnectionType, TunnelType, Dhcpv6Server, Dhcpv6ClientDuid, Dhcpv6ClientDuidLength и Dhcpv6Iaid.

В версии структуры IP_ADAPTER_ADDRESSES в Windows Vista с пакетом обновления 1 (SP1) и более поздних версий, а также в Windows Server 2008 и более поздних версиях добавлен следующий новый член: FirstDnsSuffix.

Члены Ipv4Metric и Ipv6Metric используются для определения приоритетов метрик маршрутов для маршрутов, подключенных к нескольким интерфейсам на локальном компьютере.

Порядок связанных IP_ADAPTER_UNICAST_ADDRESS структур, на которые указывает элемент FirstUnicastAddress , возвращаемый функцией GetAdaptersAddresses , не отражает порядок добавления IP-адресов в адаптер и может отличаться в разных версиях Windows. Аналогичным образом порядок связанных IP_ADAPTER_ANYCAST_ADDRESS структур, на которые указывает член FirstAnycastAddress , и порядок связанных IP_ADAPTER_MULTICAST_ADDRESS структур, на которые указывает член FirstMulticastAddress , не отражают порядок добавления IP-адресов в адаптер и может отличаться в разных версиях Windows.

Кроме того, связанные структуры IP_ADAPTER_UNICAST_ADDRESS , на которые указывает элемент FirstUnicastAddress , и связанные структуры IP_ADAPTER_PREFIX , на которые указывает элемент FirstPrefix , поддерживаются операционной системой как отдельные внутренние связанные списки. В результате порядок связанных IP_ADAPTER_UNICAST_ADDRESS структур, на которые указывает член FirstUnicastAddress , не имеет никакой связи с порядком связанных IP_ADAPTER_PREFIX структур, на которые указывает элемент FirstPrefix .

В Windows Vista и более поздних версиях связанные структуры IP_ADAPTER_PREFIX , на которые указывает элемент FirstPrefix , включают три префикса IP-адаптера для каждого IP-адреса, назначенного адаптеру. К ним относятся префикс IP-адреса узла, префикс IP-адреса подсети и префикс широковещательного IP-адреса подсети. Кроме того, для каждого адаптера есть префикс многоадресной рассылки и префикс адреса широковещательной рассылки.

В Windows XP с пакетом обновления 1 (SP1) и более поздних версий до Windows Vista связанные структуры IP_ADAPTER_PREFIX , на которые указывает член FirstPrefix , включают только один префикс IP-адаптера для каждого IP-адреса, назначенного адаптеру.

В Windows SDK версия структуры для использования в Windows Vista и более поздних версий определяется как IP_ADAPTER_ADDRESSES_LH. В пакете sdk для Microsoft Windows версия этой структуры, которая будет использоваться в более ранних системах, включая Windows XP с пакетом обновления 1 (SP1) и более поздних версий, определяется как IP_ADAPTER_ADDRESSES_XP. При компиляции приложения, если целевой платформой является Windows Vista и более поздних версий (NTDDI_VERSION >= NTDDI_LONGHORN, _WIN32_WINNT >= 0x0600или WINVER >= 0x0600), структура IP_ADAPTER_ADDRESSES_LH определяется в IP_ADAPTER_ADDRESSES структуре. При компиляции приложения, если целевой платформой не является Windows Vista и более поздних версий, структура IP_ADAPTER_ADDRESSES_XP определяется в IP_ADAPTER_ADDRESSES структуре.

Структура SOCKET_ADDRESS используется в структуре IP_ADAPTER_ADDRESSES . В windows SDK, выпущенном для Windows Vista и более поздних версий, организация файлов заголовков изменилась, и структура SOCKET_ADDRESS определяется в файле заголовка Ws2def.h , который автоматически включается в файл заголовка Winsock2.h . В пакете sdk для платформы, выпущенном для Windows Server 2003 и Windows XP, структура SOCKET_ADDRESS объявляется в файле заголовка Winsock2.h . Чтобы использовать структуру IP_ADAPTER_ADDRESSES , файл заголовка Winsock2.h должен быть включен перед файлом заголовка Iphlpapi.h .

Примеры

В этом примере извлекается структура IP_ADAPTER_ADDRESSES для адаптеров, связанных с системой, и выводится несколько элементов для каждого интерфейса адаптера.

#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#pragma comment(lib, "IPHLPAPI.lib")

#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))

/* Note: could also use malloc() and free() */

int __cdecl main(int argc, char **argv)
{

    /* Declare and initialize variables */

    DWORD dwSize = 0;
    DWORD dwRetVal = 0;

    unsigned int i = 0;

    // Set the flags to pass to GetAdaptersAddresses
    ULONG flags = GAA_FLAG_INCLUDE_PREFIX;

    // default to unspecified address family (both)
    ULONG family = AF_UNSPEC;

    LPVOID lpMsgBuf = NULL;

    PIP_ADAPTER_ADDRESSES pAddresses = NULL;
    ULONG outBufLen = 0;

    PIP_ADAPTER_ADDRESSES pCurrAddresses = NULL;
    PIP_ADAPTER_UNICAST_ADDRESS pUnicast = NULL;
    PIP_ADAPTER_ANYCAST_ADDRESS pAnycast = NULL;
    PIP_ADAPTER_MULTICAST_ADDRESS pMulticast = NULL;
    IP_ADAPTER_DNS_SERVER_ADDRESS *pDnServer = NULL;
    IP_ADAPTER_PREFIX *pPrefix = NULL;

    if (argc != 2) {
        printf(" Usage: getadapteraddresses family\n");
        printf("        getadapteraddresses 4 (for IPv4)\n");
        printf("        getadapteraddresses 6 (for IPv6)\n");
        printf("        getadapteraddresses A (for both IPv4 and IPv6)\n");
        exit(1);
    }

    if (atoi(argv[1]) == 4)
        family = AF_INET;
    else if (atoi(argv[1]) == 6)
        family = AF_INET6;

    outBufLen = sizeof (IP_ADAPTER_ADDRESSES);
    pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);

    // Make an initial call to GetAdaptersAddresses to get the 
    // size needed into the outBufLen variable
    if (GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen)
        == ERROR_BUFFER_OVERFLOW) {
        FREE(pAddresses);
        pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);
    }

    if (pAddresses == NULL) {
        printf("Memory allocation failed for IP_ADAPTER_ADDRESSES struct\n");
        exit(1);
    }
    // Make a second call to GetAdaptersAddresses to get the
    // actual data we want
    printf("Memory allocated for GetAdapterAddresses = %d bytes\n", outBufLen);
    printf("Calling GetAdaptersAddresses function with family = ");
    if (family == AF_INET)
        printf("AF_INET\n");
    if (family == AF_INET6)
        printf("AF_INET6\n");
    if (family == AF_UNSPEC)
        printf("AF_UNSPEC\n\n");

    dwRetVal =
        GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen);

    if (dwRetVal == NO_ERROR) {
        // If successful, output some information from the data we received
        pCurrAddresses = pAddresses;
        while (pCurrAddresses) {
            printf("\tLength of the IP_ADAPTER_ADDRESS struct: %ld\n",
                   pCurrAddresses->Length);
            printf("\tIfIndex (IPv4 interface): %u\n", pCurrAddresses->IfIndex);
            printf("\tAdapter name: %s\n", pCurrAddresses->AdapterName);

            pUnicast = pCurrAddresses->FirstUnicastAddress;
            if (pUnicast != NULL) {
                for (i = 0; pUnicast != NULL; i++)
                    pUnicast = pUnicast->Next;
                printf("\tNumber of Unicast Addresses: %d\n", i);
            } else
                printf("\tNo Unicast Addresses\n");

            pAnycast = pCurrAddresses->FirstAnycastAddress;
            if (pAnycast) {
                for (i = 0; pAnycast != NULL; i++)
                    pAnycast = pAnycast->Next;
                printf("\tNumber of Anycast Addresses: %d\n", i);
            } else
                printf("\tNo Anycast Addresses\n");

            pMulticast = pCurrAddresses->FirstMulticastAddress;
            if (pMulticast) {
                for (i = 0; pMulticast != NULL; i++)
                    pMulticast = pMulticast->Next;
                printf("\tNumber of Multicast Addresses: %d\n", i);
            } else
                printf("\tNo Multicast Addresses\n");

            pDnServer = pCurrAddresses->FirstDnsServerAddress;
            if (pDnServer) {
                for (i = 0; pDnServer != NULL; i++)
                    pDnServer = pDnServer->Next;
                printf("\tNumber of DNS Server Addresses: %d\n", i);
            } else
                printf("\tNo DNS Server Addresses\n");

            printf("\tDNS Suffix: %wS\n", pCurrAddresses->DnsSuffix);
            printf("\tDescription: %wS\n", pCurrAddresses->Description);
            printf("\tFriendly name: %wS\n", pCurrAddresses->FriendlyName);

            if (pCurrAddresses->PhysicalAddressLength != 0) {
                printf("\tPhysical address: ");
                for (i = 0; i < pCurrAddresses->PhysicalAddressLength;
                     i++) {
                    if (i == (pCurrAddresses->PhysicalAddressLength - 1))
                        printf("%.2X\n",
                               (int) pCurrAddresses->PhysicalAddress[i]);
                    else
                        printf("%.2X-",
                               (int) pCurrAddresses->PhysicalAddress[i]);
                }
            }
            printf("\tFlags: %ld\n", pCurrAddresses->Flags);
            printf("\tMtu: %lu\n", pCurrAddresses->Mtu);
            printf("\tIfType: %ld\n", pCurrAddresses->IfType);
            printf("\tOperStatus: %ld\n", pCurrAddresses->OperStatus);
            printf("\tIpv6IfIndex (IPv6 interface): %u\n",
                   pCurrAddresses->Ipv6IfIndex);
            printf("\tZoneIndices (hex): ");
            for (i = 0; i < 16; i++)
                printf("%lx ", pCurrAddresses->ZoneIndices[i]);
            printf("\n");

            pPrefix = pCurrAddresses->FirstPrefix;
            if (pPrefix) {
                for (i = 0; pPrefix != NULL; i++)
                    pPrefix = pPrefix->Next;
                printf("\tNumber of IP Adapter Prefix entries: %d\n", i);
            } else
                printf("\tNo IP Adapter Prefix entries\n");

            printf("\n");

            pCurrAddresses = pCurrAddresses->Next;
        }
    } else {
        printf("Call to GetAdaptersAddresses failed with error: %d\n",
               dwRetVal);
        if (dwRetVal == ERROR_NO_DATA)
            printf("\tNo addresses were found for the requested parameters\n");
        else {

            if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwRetVal, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),   // Default language
                              (LPTSTR) & lpMsgBuf, 0, NULL)) {
                printf("\tError: %s", lpMsgBuf);
                LocalFree(lpMsgBuf);
                FREE(pAddresses);
                exit(1);
            }
        }
    }
    FREE(pAddresses);
    return 0;
}

Требования

   
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Верхняя часть iptypes.h (включая Iphlpapi.h)

См. также раздел

GetAdaptersAddresses

IF_OPER_STATUS

Начальная страница вспомогательного ip-адреса

Вспомогательные структуры IP-адресов

IP_ADAPTER_ANYCAST_ADDRESS

IP_ADAPTER_DNS_SERVER_ADDRESS

IP_ADAPTER_DNS_SUFFIX

IP_ADAPTER_GATEWAY_ADDRESS

IP_ADAPTER_MULTICAST_ADDRESS

IP_ADAPTER_PREFIX

IP_ADAPTER_UNICAST_ADDRESS

IP_ADAPTER_WINS_SERVER_ADDRESS

SCOPE_LEVEL

SOCKET_ADDRESS

sockaddr