Share via


GetAdaptersInfo-Funktion (iphlpapi.h)

Die GetAdaptersInfo-Funktion ruft Adapterinformationen für den lokalen Computer ab.

Unter Windows XP und höher: Verwenden Sie die GetAdaptersAddresses-Funktion anstelle von GetAdaptersInfo.

Syntax

IPHLPAPI_DLL_LINKAGE ULONG GetAdaptersInfo(
  [out]     PIP_ADAPTER_INFO AdapterInfo,
  [in, out] PULONG           SizePointer
);

Parameter

[out] AdapterInfo

Ein Zeiger auf einen Puffer, der eine verknüpfte Liste von IP_ADAPTER_INFO Strukturen empfängt.

[in, out] SizePointer

Ein Zeiger auf eine ULONG-Variable , der die Größe des Puffers angibt, auf den der pAdapterInfo-Parameter verweist. Wenn diese Größe nicht ausreicht, um die Adapterinformationen zu enthalten, füllt GetAdaptersInfo diese Variable mit der erforderlichen Größe aus und gibt einen Fehlercode mit ERROR_BUFFER_OVERFLOW zurück.

Rückgabewert

Wenn die Funktion erfolgreich ist, wird der Rückgabewert ERROR_SUCCESS (definiert auf den gleichen Wert wie NO_ERROR).

Wenn die Funktion fehlschlägt, ist der Rückgabewert einer der folgenden Fehlercodes.

Rückgabecode Beschreibung
ERROR_BUFFER_OVERFLOW
Der Puffer zum Empfangen der Adapterinformationen ist zu klein. Dieser Wert wird zurückgegeben, wenn die vom pOutBufLen-Parameter angegebene Puffergröße zu klein ist, um die Adapterinformationen aufzunehmen, oder wenn der pAdapterInfo-Parameter ein NULL-Zeiger war. Wenn dieser Fehlercode zurückgegeben wird, verweist der pOutBufLen-Parameter auf die erforderliche Puffergröße.
ERROR_INVALID_DATA
Ungültige Adapterinformationen wurden abgerufen.
ERROR_INVALID_PARAMETER
Einer der Parameter ist ungültig. Dieser Fehler wird zurückgegeben, wenn der pOutBufLen-Parameter ein NULL-Zeiger ist oder der aufrufende Prozess keinen Lese-/Schreibzugriff auf den Speicher hat, auf den pOutBufLen verweist, oder wenn der aufrufende Prozess keinen Schreibzugriff auf den Speicher hat, auf den der pAdapterInfo-Parameter verweist.
ERROR_NO_DATA
Für den lokalen Computer sind keine Adapterinformationen vorhanden.
ERROR_NOT_SUPPORTED
Die GetAdaptersInfo-Funktion wird vom Betriebssystem, das auf dem lokalen Computer ausgeführt wird, nicht unterstützt.
Andere
Wenn die Funktion fehlschlägt, verwenden Sie FormatMessage , um die Nachrichtenzeichenfolge für den zurückgegebenen Fehler abzurufen.

Hinweise

Die GetAdaptersInfo-Funktion kann nur Informationen für IPv4-Adressen abrufen.

In Versionen vor Windows 10 kann die Reihenfolge, in der Adapter in der von dieser Funktion zurückgegebenen Liste angezeigt werden, über den Ordner Netzwerkverbindungen gesteuert werden: Wählen Sie im Menü Erweitert den Menüelement Erweiterte Einstellungen aus. Ab Windows 10 ist die Reihenfolge nicht angegeben.

Die Funktionen GetAdaptersInfo und GetInterfaceInfo geben keine Informationen zur IPv4-Loopbackschnittstelle zurück. Informationen zur Loopbackschnittstelle werden von der GetIpAddrTable-Funktion zurückgegeben.

Unter Windows XP und höher: Die Liste der von GetAdaptersInfo zurückgegebenen Adapter enthält unidirektionale Adapter. Um eine Liste von Adaptern zu generieren, die Daten senden und empfangen können, rufen Sie GetUniDirectionalAdapterInfo auf, und schließen Sie die zurückgegebenen Adapter aus der von GetAdaptersInfo zurückgegebenen Liste aus.

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("Loopback\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]
Zielplattform Windows
Kopfzeile iphlpapi.h
Bibliothek Iphlpapi.lib
DLL Iphlpapi.dll

Weitere Informationen

GetAdaptersAddresses

GetInterfaceInfo

GetIpAddrTable

GetNumberOfInterfaces

GetUniDirectionalAdapterInfo

IP-Hilfsfunktionsreferenz

IP-Hilfsprogramm-Startseite

IP_ADAPTER_INFO