다음을 통해 공유


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

형식: ULONGLONG

예약되어 있습니다. 컴파일러에서 구조를 정렬하는 데 사용됩니다.

Length

형식: ULONG

이 구조체의 길이(바이트)입니다. IP_ADAPTER_ADDRESSES 구조체의 길이는 WINDOWS XP SP1 이상 및 Windows Vista 이상에서 변경되었습니다.

IfIndex

형식:DWORD

이러한 주소가 연결된 IPv4 인터페이스의 인덱스입니다. Windows Server 2003 및 Windows XP에서는 인터페이스에서 IPv4를 사용할 수 없는 경우 이 멤버는 0입니다.

Next

형식: 구조체 _IP_ADAPTER_ADDRESSES*

다음 어댑터에 대한 포인터는 목록의 구조체를 주소로 지정합니다.

AdapterName

형식: PCHAR

이러한 주소가 연결된 어댑터의 이름을 포함하는 문자 배열입니다. 어댑터의 식별 이름과 달리 AdapterName 에 지정된 어댑터 이름은 영구적이며 사용자가 수정할 수 없습니다.

FirstUnicastAddress

형식: PIP_ADAPTER_UNICAST_ADDRESS

어댑터에 대한 IP 유니캐스트 주소의 연결된 목록에서 첫 번째 IP_ADAPTER_UNICAST_ADDRESS 구조체에 대한 포인터입니다.

FirstAnycastAddress

형식: PIP_ADAPTER_ANYCAST_ADDRESS

어댑터에 대한 IP 애니캐스트 주소의 연결된 목록에서 첫 번째 IP_ADAPTER_ANYCAST_ADDRESS 구조체에 대한 포인터입니다.

FirstMulticastAddress

형식: PIP_ADAPTER_MULTICAST_ADDRESS

어댑터에 대한 IP 멀티캐스트 주소 목록의 첫 번째 IP_ADAPTER_MULTICAST_ADDRESS 구조체에 대한 포인터입니다.

FirstDnsServerAddress

형식: PIP_ADAPTER_DNS_SERVER_ADDRESS

어댑터에 대한 DNS 서버 주소의 연결된 목록에서 첫 번째 IP_ADAPTER_DNS_SERVER_ADDRESS 구조체에 대한 포인터입니다.

DnsSuffix

형식: PWCHAR

이 어댑터와 연결된 DNS(Domain Name System) 접미사입니다.

Description

형식: PWCHAR

어댑터에 대한 설명입니다. 이 멤버는 읽기 전용입니다.

FriendlyName

형식: PWCHAR

어댑터의 사용자에게 친숙한 이름입니다. 예: "Local Area Connection 1." 이 이름은 ipconfig 명령줄 프로그램 및 연결 폴더와 같은 컨텍스트에 나타납니다. 이 멤버는 읽기 전용이며 IP 도우미 함수를 사용하여 수정할 수 없습니다.

이 멤버는 RFC 2863에 설명된 대로 NDIS에서 사용하는 ifAlias 필드입니다. ifAlias 필드는 NDIS 드라이버가 설치될 때 NDIS 인터페이스 공급자가 설정할 수 있습니다. NDIS 미니포트 드라이버의 경우 이 필드는 NDIS에 의해 설정됩니다.

PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]

형식: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]

어댑터의 MAC(Media Access Control) 주소입니다. 예를 들어 이더넷 네트워크에서 이 멤버는 이더넷 하드웨어 주소를 지정합니다.

PhysicalAddressLength

형식:DWORD

PhysicalAddress 멤버에 지정된 주소의 길이(바이트)입니다. 데이터 링크 계층이 없는 인터페이스의 경우 이 값은 0입니다.

Flags

형식:DWORD

어댑터에 대한 다양한 설정을 지정하는 플래그 집합입니다. 이러한 값은 Iptypes.h 헤더 파일에 정의됩니다. 이러한 플래그 비트의 조합이 가능합니다.

플래그 의미
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
어댑터는 TCP/IP를 통해 NetBIOS에 대해 사용하도록 설정됩니다.
참고 이 플래그는 NTDDI 버전이 NTDDI_LONGHORN 이상인 대상 플랫폼에 대해 애플리케이션이 컴파일된 경우에만 Windows Vista 이상에서만 지원됩니다. 이 플래그는 IP_ADAPTER_ADDRESSES_LH 구조체에서 NetbiosOverTcpipEnabled 비트 필드로 정의됩니다.
 
IP_ADAPTER_IPV4_ENABLED
0x0080
IPv4에 대해 어댑터를 사용할 수 있습니다.
참고 이 플래그는 NTDDI 버전이 NTDDI_LONGHORN 이상인 대상 플랫폼에 대해 애플리케이션이 컴파일된 경우에만 Windows Vista 이상에서만 지원됩니다. 이 플래그는 IP_ADAPTER_ADDRESSES_LH 구조체에서 Ipv4Enabled 비트 필드로 정의됩니다.
 
IP_ADAPTER_IPV6_ENABLED
0x0100
IPv6에 대해 어댑터를 사용할 수 있습니다.
참고 이 플래그는 NTDDI 버전이 NTDDI_LONGHORN 이상인 대상 플랫폼에 대해 애플리케이션이 컴파일된 경우에만 Windows Vista 이상에서만 지원됩니다. 이 플래그는 IP_ADAPTER_ADDRESSES_LH 구조체에서 Ipv6Enabled 비트 필드로 정의됩니다.
 
IP_ADAPTER_IPV6_MANAGE_ADDRESS_CONFIG
0x0200
어댑터는 IPv6 관리 주소 구성에 대해 사용하도록 설정됩니다.
참고 이 플래그는 NTDDI 버전이 NTDDI_LONGHORN 이상인 대상 플랫폼에 대해 애플리케이션이 컴파일된 경우에만 Windows Vista 이상에서만 지원됩니다. 이 플래그는 IP_ADAPTER_ADDRESSES_LH 구조체에서 Ipv6ManagedAddressConfigurationSupported 비트 필드로 정의됩니다.
 

DdnsEnabled

RegisterAdapterSuffix

Dhcpv4Enabled

ReceiveOnly

NoMulticast

Ipv6OtherStatefulConfig

NetbiosOverTcpipEnabled

Ipv4Enabled

Ipv6Enabled

Ipv6ManagedAddressConfigurationSupported

Mtu

형식:DWORD

MTU(최대 전송 단위) 크기(바이트)입니다.

IfType

형식:DWORD

IANA(Internet Assigned Names Authority)에서 정의한 인터페이스 형식입니다. 인터페이스 형식에 사용할 수 있는 값은 Ipifcons.h 헤더 파일에 나열됩니다.

아래 표에는 인터페이스 형식에 대한 공통 값이 나와 있지만 다른 많은 값이 가능합니다.

의미
IF_TYPE_OTHER
1
다른 유형의 네트워크 인터페이스.
IF_TYPE_ETHERNET_CSMACD
6
이더넷 네트워크 인터페이스.
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 보고됩니다.

SP3이 설치된 Windows XP 및 SP2 x86이 설치된 Windows XP에서 SP2가 설치된 Windows XP의 경우 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를 참조하세요. 이 멤버는 Iftypes.h 헤더 파일에 정의된 IF_OPER_STATUS 열거형 형식의 값 중 하나일 수 있습니다. Windows Vista 이상에서는 헤더 파일이 다시 구성되었으며 이 열거형은 Ifdef.h 헤더 파일에 정의되어 있습니다.

의미
IfOperStatusUp
1
인터페이스가 최대이며 패킷을 전달할 수 있습니다.
IfOperStatusDown
2
인터페이스가 다운되고 패킷을 전달하는 조건이 아닙니다. IfOperStatusDown 상태는 AdminStatus 멤버의 값에 따라 두 가지 의미가 있습니다. AdminStatusNET_IF_ADMIN_STATUS_DOWN 설정되지 않고 ifOperStatusIfOperStatusDown으로 설정된 경우 오류 조건이 인터페이스에 있는 것으로 추정됩니다. AdminStatusIfOperStatusDown으로 설정된 경우 ifOperStatus는 일반적으로 IfOperStatusDown 또는 IfOperStatusNotPresent로 설정되며 인터페이스에 오류 조건이 반드시 있는 것은 아닙니다.
IfOperStatusTesting
3
인터페이스가 테스트 모드에 있습니다.
IfOperStatusUnknown
4
인터페이스의 작동 상태 알 수 없습니다.
IfOperStatusDormant
5
인터페이스는 실제로 패킷을 전달하는 조건이 아니라(작동 중이 아님) 보류 중 상태이며 일부 외부 이벤트를 기다리고 있습니다. 주문형 인터페이스의 경우 이 새 상태는 인터페이스가 이벤트가 IfOperStatusUp 상태에 배치되기를 기다리는 상황을 식별합니다.
IfOperStatusNotPresent
6
일부 구성 요소(일반적으로 하드웨어 구성 요소)가 관리 시스템에 없기 때문에 관련 인터페이스가 특히 중단되었음을 나타내는 IfOperStatusDown 상태에 대한 구체화입니다.
IfOperStatusLowerLayerDown
7
IfOperStatusDown 상태에 대한 구체화입니다. 이 새 상태는 이 인터페이스가 하나 이상의 다른 인터페이스에서 실행되고 이러한 하위 계층 인터페이스 중 하나 이상이 다운되었기 때문에 이 인터페이스가 특히 다운되었음을 나타냅니다.

Ipv6IfIndex

형식:DWORD

IPv6 IP 주소의 인터페이스 인덱스입니다. 인터페이스에서 IPv6을 사용할 수 없는 경우 이 멤버는 0입니다.

참고 이 구조체 멤버는 WINDOWS XP SP1 이상에서만 사용할 수 있습니다.
 

ZoneIndices[16]

형식: DWORD[16]

sockaddr 구조를 구성하는 데 사용되는 각 scope 수준에 대한 scope ID 배열입니다. SCOPE_LEVEL 열거형은 배열을 인덱싱하는 데 사용됩니다. IPv6에서는 단일 인터페이스에 scope ID에 따라 여러 IPv6 멀티캐스트 주소가 할당될 수 있습니다.

참고 이 구조체 멤버는 WINDOWS XP SP1 이상에서만 사용할 수 있습니다.
 

FirstPrefix

형식: PIP_ADAPTER_PREFIX

어댑터에 대한 IP 어댑터 접두사 링크 목록의 첫 번째 IP_ADAPTER_PREFIX 구조체에 대한 포인터입니다.

참고 이 구조체 멤버는 WINDOWS XP SP1 이상에서만 사용할 수 있습니다.
 

TransmitLinkSpeed

형식: ULONG64

어댑터에 대한 전송 링크의 현재 속도(초당 비트)입니다.

참고 이 구조체 멤버는 Windows Vista 이상에서만 사용할 수 있습니다.
 

ReceiveLinkSpeed

형식: ULONG64

어댑터에 대한 수신 링크의 현재 속도(초당 비트)입니다.

참고 이 구조체 멤버는 Windows Vista 이상에서만 사용할 수 있습니다.
 

FirstWinsServerAddress

형식: PIP_ADAPTER_WINS_SERVER_ADDRESS_LH

어댑터에 대한 WINS(Windows Internet Name Service) 서버 주소의 연결된 목록의 첫 번째 IP_ADAPTER_WINS_SERVER_ADDRESS 구조체에 대한 포인터입니다.

참고 이 구조체 멤버는 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

어댑터 주소에 대한 DHCP 서버의 IPv4 주소입니다. 이 멤버는 DHCP를 사용하여 구성된 IPv4 어댑터 주소에만 적용됩니다.

참고 이 구조체 멤버는 Windows Vista 이상에서만 사용할 수 있습니다.
 

CompartmentId

형식: NET_IF_COMPARTMENT_ID

어댑터 주소의 라우팅 구획 ID입니다.

참고 이 구조체 멤버는 Windows Vista 이상에서만 사용할 수 있습니다. 이 멤버는 현재 지원되지 않으며 나중에 사용하도록 예약되어 있습니다.
 

NetworkGuid

형식: NET_IF_NETWORK_GUID

인터페이스가 속한 네트워크와 연결된 GUID 입니다.

인터페이스 공급자가 네트워크 GUID를 제공할 수 없는 경우 이 멤버는 GUID가 0일 수 있습니다. 이 경우 인터페이스는 기본 네트워크의 NDIS에 의해 등록되었습니다.

참고 이 구조체 멤버는 Windows Vista 이상에서만 사용할 수 있습니다.
 

ConnectionType

형식: NET_IF_CONNECTION_TYPE

어댑터 주소의 인터페이스 연결 유형입니다.

이 멤버는 Ifdef.h 헤더 파일에 정의된 NET_IF_CONNECTION_TYPE 열거형 형식의 값 중 하나일 수 있습니다.

의미
NET_IF_CONNECTION_DEDICATED
1
연결 유형이 전용입니다. 미디어 센스 TRUE이면 연결이 자동으로 표시됩니다. 예를 들어 이더넷 연결은 전용입니다.
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를 참조하세요. 이 멤버는 Ifdef.h 헤더 파일에 정의된 TUNNEL_TYPE 열거형 형식의 값 중 하나일 수 있습니다.
의미
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
IPv6 패킷에 대한 Teredo 캡슐화
TUNNEL_TYPE_IPHTTPS
15
IPv6 패킷에 대한 HTTPS 캡슐화를 통한 IP입니다.
참고 이 열거형 값은 Windows 7, Windows Server 2008 R2 이상에서만 사용할 수 있습니다.
 

Dhcpv6Server

형식: SOCKET_ADDRESS

어댑터 주소에 대한 DHCPv6 서버의 IPv6 주소입니다. 이 멤버는 DHCPv6을 사용하여 구성된 IPv6 어댑터 주소에만 적용됩니다. 이 구조체 멤버는 현재 지원되지 않으며 나중에 사용하도록 예약되어 있습니다.

참고 이 구조체 멤버는 Windows Vista 이상에서만 사용할 수 있습니다.
 

Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH]

형식: BYTE[MAX_DHCPV6_DUID_LENGTH]

DHCPv6 클라이언트에 대한 DHCP DUID(고유 식별자)입니다. 이 멤버는 DHCPv6을 사용하여 구성된 IPv6 어댑터 주소에만 적용됩니다.

참고 이 구조체 멤버는 Windows Vista 이상에서만 사용할 수 있습니다.
 

Dhcpv6ClientDuidLength

형식: ULONG

DHCPv6 클라이언트에 대한 DHCP DUID(고유 식별자)의 길이(바이트)입니다. 이 멤버는 DHCPv6을 사용하여 구성된 IPv6 어댑터 주소에만 적용됩니다.

참고 이 구조체 멤버는 Windows Vista 이상에서만 사용할 수 있습니다.
 

Dhcpv6Iaid

형식: ULONG

DHCPv6 클라이언트에서 선택한 ID 연결의 식별자입니다. 이 멤버는 DHCPv6을 사용하여 구성된 IPv6 어댑터 주소에만 적용됩니다.

참고 이 구조체 멤버는 Windows Vista 이상에서만 사용할 수 있습니다.
 

FirstDnsSuffix

형식: PIP_ADAPTER_DNS_SUFFIX

어댑터에 대한 DNS 접미사 연결 목록의 첫 번째 IP_ADAPTER_DNS_SUFFIX 구조체에 대한 포인터입니다.

참고 이 구조체 멤버는 WINDOWS Vista SP1 이상 및 Windows Server 2008 이상에서만 사용할 수 있습니다.
 

설명

GetAdaptersAddresses 함수는 IPv4 및 IPv6 주소에 대한 정보를 검색하고 이 정보를 IP_ADAPTER_ADDRESSES 구조체의 연결된 목록으로 반환합니다.

IfIndexIpv6IfIndex 멤버에 지정된 어댑터 인덱스 값은 어댑터를 사용하지 않도록 설정한 다음 사용하도록 설정하거나 다른 상황에서는 변경할 수 있으며 영구로 간주해서는 안 됩니다.

IfType 멤버의 값은 Ipifcons.h 헤더 파일에 정의되어 있습니다. IfType 멤버의 설명에 나열된 가능한 값만 현재 지원됩니다.

windows XP SP1 이상에서 IP_ADAPTER_ADDRESSES 구조체의 크기가 변경되었습니다. IP_ADAPTER_ADDRESSES 구조체의 크기도 Windows Vista 이상에서 변경되었습니다. IP_ADAPTER_ADDRESSES 구조의 크기도 WINDOWS Vista SP1 이상 및Windows Server 2008 이상에서 변경되었습니다. Length 멤버를 사용하여 사용 중인 IP_ADAPTER_ADDRESSES 구조체의 버전을 결정해야 합니다.

SP1 이상을 사용하는 Windows XP의 IP_ADAPTER_ADDRESSES 구조 버전에는 Ipv6IfIndex, ZoneIndicesFirstPrefix라는 새 멤버가 추가되었습니다.

Windows Vista 이상에서 IP_ADAPTER_ADDRESSES 구조의 버전에는 새 멤버가 추가 되었습니다. TransmitLinkSpeed, ReceiveLinkSpeed, FirstWinsServerAddress, FirstGatewayAddress, Ipv4Metric, Ipv6Metric, Luid, Dhcpv4Server, CompartmentId, NetworkGuid, ConnectionType, TunnelType, Dhcpv6Server, Dhcpv6ClientDuid, Dhcpv6ClientDuidLengthDhcpv6Iaid.

Sp1 이상 및 Windows Server 2008 이상에서 Windows Vista의 IP_ADAPTER_ADDRESSES 구조 버전에는 FirstDnsSuffix라는 새 멤버가 추가되었습니다.

Ipv4MetricIpv6Metric 멤버는 로컬 컴퓨터의 여러 인터페이스에 연결된 경로에 대한 경로 메트릭의 우선 순위를 지정하는 데 사용됩니다.

GetAdaptersAddresses 함수에서 반환하는 FirstUnicastAddress 멤버가 가리키는 연결된 IP_ADAPTER_UNICAST_ADDRESS 구조체의 순서는 IP 주소가 어댑터에 추가된 순서를 반영하지 않으며 Windows 버전마다 다를 수 있습니다. 마찬가지로 FirstAnycastAddress 멤버가 가리키는 연결된 IP_ADAPTER_ANYCAST_ADDRESS 구조체의 순서와 FirstMulticastAddress 멤버가 가리키는 연결된 IP_ADAPTER_MULTICAST_ADDRESS 구조의 순서는 IP 주소가 어댑터에 추가된 순서를 반영하지 않으며 Windows 버전마다 다를 수 있습니다.

또한 FirstUnicastAddress 멤버가 가리키는 연결된 IP_ADAPTER_UNICAST_ADDRESS 구조체와 FirstPrefix 멤버가 가리키는 연결된 IP_ADAPTER_PREFIX 구조체는 운영 체제에서 별도의 내부 연결된 목록으로 유지 관리됩니다. 따라서 FirstUnicastAddress 멤버가 가리키는 연결된 IP_ADAPTER_UNICAST_ADDRESS 구조체의 순서는 FirstPrefix 멤버가 가리키는 연결된 IP_ADAPTER_PREFIX 구조체의 순서와 관계가 없습니다.

Windows Vista 이상에서는 FirstPrefix 멤버가 가리키는 연결된 IP_ADAPTER_PREFIX 구조체에 어댑터에 할당된 각 IP 주소에 대해 3개의 IP 어댑터 접두사를 포함합니다. 여기에는 호스트 IP 주소 접두사, 서브넷 IP 주소 접두사 및 서브넷 브로드캐스트 IP 주소 접두사 등이 포함됩니다. 또한 각 어댑터에는 멀티캐스트 주소 접두사 및 브로드캐스트 주소 접두사도 있습니다.

Windows XP SP1 이상 Windows Vista에서 FirstPrefix 멤버가 가리키는 연결된 IP_ADAPTER_PREFIX 구조에는 어댑터에 할당된 각 IP 주소에 대한 단일 IP 어댑터 접두사만 포함됩니다.

Windows SDK에서 Windows Vista 이상에서 사용할 구조체의 버전은 IP_ADAPTER_ADDRESSES_LH 정의됩니다. Microsoft Windows SDK(소프트웨어 개발 키트)에서 SP1 이상 Windows XP를 포함하여 이전 시스템에서 사용할 이 구조의 버전은 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 Vista 이상용으로 릴리스된 Windows SDK에서 헤더 파일의 organization 변경되었으며 SOCKET_ADDRESS 구조는 Winsock2.h 헤더 파일에 의해 자동으로 포함되는 Ws2def.h 헤더 파일에 정의됩니다. Windows Server 2003 및 Windows XP용으로 릴리스된 플랫폼 SDK(소프트웨어 개발 키트)에서 SOCKET_ADDRESS 구조는 Winsock2.h 헤더 파일에 선언됩니다. IP_ADAPTER_ADDRESSES 구조를 사용하려면 Iphlpapi.h 헤더 파일 앞에 Winsock2.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