IP_ADAPTER_INFO-Struktur (iptypes.h)

Die IP_ADAPTER_INFO-Struktur enthält Informationen zu einem bestimmten Netzwerkadapter auf dem lokalen Computer.

Syntax

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;
  BYTE                    Address[MAX_ADAPTER_ADDRESS_LENGTH];
  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;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;

Members

Next

Typ: Struktur _IP_ADAPTER_INFO*

Ein Zeiger auf den nächsten Adapter in der Liste der Adapter.

ComboIndex

Art: DWORD

Reserviert.

AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]

Typ: char[MAX_ADAPTER_NAME_LENGTH + 4]

Eine ANSI-Zeichenfolge des Namens des Adapters.

Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]

Typ: char[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]

Eine ANSI-Zeichenfolge, die die Beschreibung des Adapters enthält.

AddressLength

Typ: UINT

Die Länge der Hardwareadresse für den Adapter in Bytes.

Address[MAX_ADAPTER_ADDRESS_LENGTH]

Typ: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]

Die Hardwareadresse für den Adapter, der als BYTE-Array dargestellt wird.

Index

Art: DWORD

Der Adapterindex.

Der Adapterindex kann sich ändern, wenn ein Adapter deaktiviert und dann aktiviert wird, oder unter anderen Umständen, und er sollte nicht als persistent betrachtet werden.

Type

Typ: UINT

Der Adaptertyp. Mögliche Werte für den Adaptertyp sind in der Headerdatei Ipifcons.h aufgeführt.

In der folgenden Tabelle sind allgemeine Werte für den Adaptertyp aufgeführt, obwohl andere Werte unter Windows Vista und höher möglich sind.

Wert Bedeutung
MIB_IF_TYPE_OTHER
1
Eine andere Art von Netzwerkschnittstelle.
MIB_IF_TYPE_ETHERNET
6
Eine Ethernet-Netzwerkschnittstelle.
IF_TYPE_ISO88025_TOKENRING
9
MIB_IF_TYPE_TOKENRING
MIB_IF_TYPE_PPP
23
Eine PPP-Netzwerkschnittstelle.
MIB_IF_TYPE_LOOPBACK
24
Eine Softwareschleifen-Netzwerkschnittstelle.
MIB_IF_TYPE_SLIP
28
Eine ATM-Netzwerkschnittstelle.
IF_TYPE_IEEE80211
71
Eine IEEE 802.11-Funknetzwerkschnittstelle.
Hinweis Dieser Adaptertyp wird unter Windows Vista und höher zurückgegeben. Unter Windows Server 2003 und Windows XP gibt eine IEEE 802.11-Drahtlosnetzwerkschnittstelle den Adaptertyp MIB_IF_TYPE_ETHERNET zurück.
 

DhcpEnabled

Typ: UINT

Ein Optionswert, der angibt, ob das Dynamic Host Configuration Protocol (DHCP) für diesen Adapter aktiviert ist.

CurrentIpAddress

Typ: PIP_ADDR_STRING

Reserviert.

IpAddressList

Typ: IP_ADDR_STRING

Die Liste der IPv4-Adressen, die diesem Adapter zugeordnet sind, wird als verknüpfte Liste von IP_ADDR_STRING-Strukturen dargestellt. Einem Adapter können mehrere IPv4-Adressen zugewiesen sein.

GatewayList

Typ: IP_ADDR_STRING

Die IPv4-Adresse des Gateways für diesen Adapter, dargestellt als verknüpfte Liste von IP_ADDR_STRING Strukturen. Einem Adapter können mehrere IPv4-Gatewayadressen zugewiesen sein. Diese Liste enthält in der Regel einen einzelnen Eintrag für die IPv4-Adresse des Standardgateways für diesen Adapter.

DhcpServer

Typ: IP_ADDR_STRING

Die IPv4-Adresse des DHCP-Servers für diesen Adapter, die als verknüpfte Liste von IP_ADDR_STRING-Strukturen dargestellt wird. Diese Liste enthält einen einzelnen Eintrag für die IPv4-Adresse des DHCP-Servers für diesen Adapter. Der Wert 255.255.255.255 gibt an, dass der DHCP-Server nicht erreicht werden konnte oder gerade erreicht wird.

Dieser Member ist nur gültig, wenn das DhcpEnabled-Element ungleich null ist.

HaveWins

Typ: BOOL

Ein Optionswert, der angibt, ob dieser Adapter den Windows Internet Name Service (WINS) verwendet.

PrimaryWinsServer

Typ: IP_ADDR_STRING

Die IPv4-Adresse des primären WINS-Servers, der als verknüpfte Liste von IP_ADDR_STRING-Strukturen dargestellt wird. Diese Liste enthält einen einzelnen Eintrag für die IPv4-Adresse des primären WINS-Servers für diesen Adapter.

Dieser Member ist nur gültig, wenn das HaveWins-ElementTRUE ist.

SecondaryWinsServer

Typ: IP_ADDR_STRING

Die IPv4-Adresse des sekundären WINS-Servers, der als verknüpfte Liste von IP_ADDR_STRING Strukturen dargestellt wird. Einem Adapter können mehrere sekundäre WINS-Serveradressen zugewiesen sein.

Dieser Member ist nur gültig, wenn das HaveWins-ElementTRUE ist.

LeaseObtained

Typ: time_t

Der Zeitpunkt, zu dem die aktuelle DHCP-Lease abgerufen wurde.

Dieser Member ist nur gültig, wenn das DhcpEnabled-Element ungleich null ist.

LeaseExpires

Typ: time_t

Der Zeitpunkt, zu dem die aktuelle DHCP-Lease abläuft.

Dieser Member ist nur gültig, wenn das DhcpEnabled-Element ungleich null ist.

Hinweise

Die IP_ADAPTER_INFO-Struktur ist auf IPv4-Informationen zu einem bestimmten Netzwerkadapter auf dem lokalen Computer beschränkt. Die IP_ADAPTER_INFO-Struktur wird durch Aufrufen der GetAdaptersInfo-Funktion abgerufen.

Bei Verwendung von Visual Studio 2005 und höher wird der time_t Datentyp standardmäßig auf einen 8-Byte-Datentyp festgelegt, nicht auf den 4-Byte-Datentyp, der für die LeaseObtained - und LeaseExpires-Member auf einer 32-Bit-Plattform verwendet wird. Um die IP_ADAPTER_INFO-Struktur auf einer 32-Bit-Plattform ordnungsgemäß zu verwenden, definieren Sie _USE_32BIT_TIME_T (z. B. als Option verwenden -D _USE_32BIT_TIME_T ), wenn Sie die Anwendung kompilieren, um den Datentyp time_t zu einem 4-Byte-Datentyp zu erzwingen.

Für die Verwendung unter Windows XP und höher enthält die IP_ADAPTER_ADDRESSES-Struktur sowohl IPv4- als auch IPv6-Informationen. Die GetAdaptersAddresses-Funktion ruft IPv4- und IPv6-Adapterinformationen ab.

Beispiele

In diesem Beispiel werden die Adapterinformationen abgerufen und verschiedene Eigenschaften der einzelnen Adapter ausgegeben.

#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.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()
{

    /* Declare and initialize variables */

// It is possible for an adapter to have multiple
// IPv4 addresses, gateways, and secondary WINS servers
// assigned to the adapter. 
//
// Note that this sample code only prints out the 
// first entry for the IP address/mask, and gateway, and
// the primary and secondary WINS server for each adapter. 

    PIP_ADAPTER_INFO pAdapterInfo;
    PIP_ADAPTER_INFO pAdapter = NULL;
    DWORD dwRetVal = 0;
    UINT i;

/* variables used to print DHCP time info */
    struct tm newtime;
    char buffer[32];
    errno_t error;

    ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
    pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(sizeof (IP_ADAPTER_INFO));
    if (pAdapterInfo == NULL) {
        printf("Error allocating memory needed to call GetAdaptersinfo\n");
        return 1;
    }
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
    if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
        FREE(pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
        if (pAdapterInfo == NULL) {
            printf("Error allocating memory needed to call GetAdaptersinfo\n");
            return 1;
        }
    }

    if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
        pAdapter = pAdapterInfo;
        while (pAdapter) {
            printf("\tComboIndex: \t%d\n", pAdapter->ComboIndex);
            printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
            printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
            printf("\tAdapter Addr: \t");
            for (i = 0; i < pAdapter->AddressLength; i++) {
                if (i == (pAdapter->AddressLength - 1))
                    printf("%.2X\n", (int) pAdapter->Address[i]);
                else
                    printf("%.2X-", (int) pAdapter->Address[i]);
            }
            printf("\tIndex: \t%d\n", pAdapter->Index);
            printf("\tType: \t");
            switch (pAdapter->Type) {
            case MIB_IF_TYPE_OTHER:
                printf("Other\n");
                break;
            case MIB_IF_TYPE_ETHERNET:
                printf("Ethernet\n");
                break;
            case MIB_IF_TYPE_TOKENRING:
                printf("Token Ring\n");
                break;
            case MIB_IF_TYPE_FDDI:
                printf("FDDI\n");
                break;
            case MIB_IF_TYPE_PPP:
                printf("PPP\n");
                break;
            case MIB_IF_TYPE_LOOPBACK:
                printf("Lookback\n");
                break;
            case MIB_IF_TYPE_SLIP:
                printf("Slip\n");
                break;
            default:
                printf("Unknown type %ld\n", pAdapter->Type);
                break;
            }

            printf("\tIP Address: \t%s\n",
                   pAdapter->IpAddressList.IpAddress.String);
            printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);

            printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
            printf("\t***\n");

            if (pAdapter->DhcpEnabled) {
                printf("\tDHCP Enabled: Yes\n");
                printf("\t  DHCP Server: \t%s\n",
                       pAdapter->DhcpServer.IpAddress.String);

                printf("\t  Lease Obtained: ");
                /* Display local time */
                error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained);
                if (error)
                    printf("Invalid Argument to _localtime32_s\n");
                else {
                    // Convert to an ASCII representation 
                    error = asctime_s(buffer, 32, &newtime);
                    if (error)
                        printf("Invalid Argument to asctime_s\n");
                    else
                        /* asctime_s returns the string terminated by \n\0 */
                        printf("%s", buffer);
                }

                printf("\t  Lease Expires:  ");
                error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseExpires);
                if (error)
                    printf("Invalid Argument to _localtime32_s\n");
                else {
                    // Convert to an ASCII representation 
                    error = asctime_s(buffer, 32, &newtime);
                    if (error)
                        printf("Invalid Argument to asctime_s\n");
                    else
                        /* asctime_s returns the string terminated by \n\0 */
                        printf("%s", buffer);
                }
            } else
                printf("\tDHCP Enabled: No\n");

            if (pAdapter->HaveWins) {
                printf("\tHave Wins: Yes\n");
                printf("\t  Primary Wins Server:    %s\n",
                       pAdapter->PrimaryWinsServer.IpAddress.String);
                printf("\t  Secondary Wins Server:  %s\n",
                       pAdapter->SecondaryWinsServer.IpAddress.String);
            } else
                printf("\tHave Wins: No\n");
            pAdapter = pAdapter->Next;
            printf("\n");
        }
    } else {
        printf("GetAdaptersInfo failed with error: %d\n", dwRetVal);

    }
    if (pAdapterInfo)
        FREE(pAdapterInfo);

    return 0;
}

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Kopfzeile iptypes.h (include Iphlpapi.h)

Weitere Informationen

GetAdaptersAddresses

GetAdaptersInfo

IP-Hilfsprogramm-Startseite

IP-Hilfsstrukturen

IP_ADAPTER_ADDRESSES

IP_ADDRESS_STRING

IP_ADDR_STRING