структура 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 . Возможны сочетания этих битов флагов.
DdnsEnabled
RegisterAdapterSuffix
Dhcpv4Enabled
ReceiveOnly
NoMulticast
Ipv6OtherStatefulConfig
NetbiosOverTcpipEnabled
Ipv4Enabled
Ipv6Enabled
Ipv6ManagedAddressConfigurationSupported
Mtu
Тип: DWORD
Максимальный размер единицы передачи (MTU) в байтах.
IfType
Тип: DWORD
Тип интерфейса, определенный центром имен, назначенных Через Интернет (IANA). Возможные значения для типа интерфейса перечислены в файле заголовка Ipifcons.h .
В приведенной ниже таблице перечислены общие значения для типа интерфейса, хотя возможны и многие другие значения.
Значение | Значение |
---|---|
|
Другой тип сетевого интерфейса. |
|
Сетевой интерфейс Ethernet. |
|
Сетевой интерфейс круга маркеров. |
|
Сетевой интерфейс PPP. |
|
Программный сетевой интерфейс замыкания на себя. |
|
Сетевой интерфейс ATM. |
|
Беспроводной сетевой интерфейс 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 можно использовать для перечисления беспроводных интерфейсов на локальном компьютере. |
|
Сетевой интерфейс инкапсуляции типа туннеля. |
|
Высокопроизводительный сетевой интерфейс последовательной шины 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 .
Ipv6IfIndex
Тип: DWORD
Индекс интерфейса для IP-адреса IPv6. Этот член равен нулю, если протокол IPv6 недоступен в интерфейсе.
ZoneIndices[16]
Тип: DWORD[16]
Массив идентификаторов область для каждого уровня область, используемого для создания структур sockaddr. Перечисление SCOPE_LEVEL используется для индексирования массива. В IPv6 одному интерфейсу может быть назначено несколько адресов многоадресной рассылки IPv6 на основе идентификатора область.
FirstPrefix
Тип: PIP_ADAPTER_PREFIX
Указатель на первую структуру IP_ADAPTER_PREFIX в связанном списке префиксов IP-адаптера для адаптера.
TransmitLinkSpeed
Тип: ULONG64
Текущая скорость в битах в секунду канала передачи для адаптера.
ReceiveLinkSpeed
Тип: ULONG64
Текущая скорость в битах в секунду канала приема для адаптера.
FirstWinsServerAddress
Тип: PIP_ADAPTER_WINS_SERVER_ADDRESS_LH
Указатель на первую структуру IP_ADAPTER_WINS_SERVER_ADDRESS в связанном списке адресов серверов WINS для адаптера.
FirstGatewayAddress
Тип: PIP_ADAPTER_GATEWAY_ADDRESS_LH
Указатель на первую структуру IP_ADAPTER_GATEWAY_ADDRESS в связанном списке шлюзов для адаптера.
Ipv4Metric
Тип: ULONG
Метрика интерфейса IPv4 для адреса адаптера. Этот элемент применим только к адресу адаптера IPv4.
Фактическая метрика маршрута, используемая для вычисления параметров маршрута для IPv4, представляет собой суммирование смещения метрики маршрута, указанного в элементе Метрикиструктуры MIB_IPFORWARD_ROW2 и метрики интерфейса, указанной в этом элементе для IPv4.
Ipv6Metric
Тип: ULONG
Метрика интерфейса IPv6 для адреса адаптера. Этот элемент применим только к адресу адаптера IPv6.
Фактическая метрика маршрута, используемая для вычисления параметров маршрута для IPv6, представляет собой суммирование смещения метрики маршрута, указанного в элементе Метрикиструктуры MIB_IPFORWARD_ROW2 , и метрики интерфейса, указанной в этом элементе для IPv4.
Luid
Тип: IF_LUID
LUID интерфейса для адреса адаптера.
Dhcpv4Server
Тип: SOCKET_ADDRESS
IPv4-адрес DHCP-сервера для адреса адаптера. Этот элемент применим только к адресу адаптера IPv4, настроенного с помощью DHCP.
CompartmentId
Тип: NET_IF_COMPARTMENT_ID
Идентификатор секции маршрутизации для адреса адаптера.
NetworkGuid
Тип: NET_IF_NETWORK_GUID
Идентификатор GUID, связанный с сетью, к которой принадлежит интерфейс.
Если поставщик интерфейса не может предоставить guid сети, этот элемент может быть нулевым GUID. В этом случае интерфейс был зарегистрирован NDIS в сети по умолчанию.
ConnectionType
Тип: NET_IF_CONNECTION_TYPE
Тип подключения интерфейса для адреса адаптера.
Этот элемент может быть одним из значений из типа перечисления NET_IF_CONNECTION_TYPE , определенного в файле заголовка Ifdef.h .
TunnelType
Тип: TUNNEL_TYPE
Метод инкапсуляции, используемый туннелем, если адрес адаптера является туннелем.
Dhcpv6Server
Тип: SOCKET_ADDRESS
IPv6-адрес сервера DHCPv6 для адреса адаптера. Этот элемент применим только к адресу адаптера IPv6, настроенного с помощью DHCPv6. Этот элемент структуры в настоящее время не поддерживается и зарезервирован для использования в будущем.
Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH]
Тип: BYTE[MAX_DHCPV6_DUID_LENGTH]
Уникальный идентификатор DHCP (DUID) для клиента DHCPv6. Этот элемент применим только к адресу адаптера IPv6, настроенного с помощью DHCPv6.
Dhcpv6ClientDuidLength
Тип: ULONG
Длина (в байтах) уникального идентификатора DHCP (DUID) для клиента DHCPv6. Этот элемент применим только к адресу адаптера IPv6, настроенного с помощью DHCPv6.
Dhcpv6Iaid
Тип: ULONG
Идентификатор для сопоставления удостоверений, выбранного клиентом DHCPv6. Этот элемент применим только к адресу адаптера IPv6, настроенного с помощью DHCPv6.
FirstDnsSuffix
Тип: PIP_ADAPTER_DNS_SUFFIX
Указатель на первую IP_ADAPTER_DNS_SUFFIX структуру в связанном списке DNS-суффиксов для адаптера.
Комментарии
Функция 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) |
См. также раздел
Начальная страница вспомогательного ip-адреса
Вспомогательные структуры IP-адресов
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по