Condividi tramite


Funzione GetAdaptersInfo (iphlpapi.h)

La funzione GetAdaptersInfo recupera le informazioni sull'adattatore per il computer locale.

In Windows XP e versioni successive: Usare la funzione GetAdaptersAddresses anziché GetAdaptersInfo.

Sintassi

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

Parametri

[out] AdapterInfo

Puntatore a un buffer che riceve un elenco collegato di strutture IP_ADAPTER_INFO .

[in, out] SizePointer

Puntatore a una variabile ULONG che specifica le dimensioni del buffer a cui punta il parametro pAdapterInfo . Se questa dimensione non è sufficiente per contenere le informazioni sull'adattatore, GetAdaptersInfo inserisce questa variabile con le dimensioni necessarie e restituisce un codice di errore di ERROR_BUFFER_OVERFLOW.

Valore restituito

Se la funzione ha esito positivo, il valore restituito viene ERROR_SUCCESS (definito allo stesso valore di NO_ERROR).

Se la funzione ha esito negativo, il valore restituito è uno dei codici di errore seguenti.

Codice restituito Descrizione
ERROR_BUFFER_OVERFLOW
Il buffer per ricevere le informazioni sull'adattatore è troppo piccolo. Questo valore viene restituito se la dimensione del buffer indicata dal parametro pOutBufLen è troppo piccola per contenere le informazioni sull'adattatore o il parametro pAdapterInfo è un puntatore NULL . Quando viene restituito questo codice di errore, il parametro pOutBufLen punta alle dimensioni del buffer necessarie.
ERROR_INVALID_DATA
Sono state recuperate informazioni sull'adattatore non valide.
ERROR_INVALID_PARAMETER
Uno dei parametri non è valido. Questo errore viene restituito se il parametro pOutBufLen è un puntatore NULL o il processo chiamante non ha accesso in lettura/scrittura alla memoria a cui punta pOutBufLen o il processo chiamante non ha accesso in scrittura alla memoria a cui punta il parametro pAdapterInfo .
ERROR_NO_DATA
Nessuna informazione sull'adattatore per il computer locale.
ERROR_NOT_SUPPORTED
La funzione GetAdaptersInfo non è supportata dal sistema operativo in esecuzione nel computer locale.
Altri
Se la funzione ha esito negativo, usare FormatMessage per ottenere la stringa del messaggio per l'errore restituito.

Commenti

La funzione GetAdaptersInfo può recuperare informazioni solo per gli indirizzi IPv4.

Nelle versioni precedenti a Windows 10, l'ordine in cui le schede vengono visualizzate nell'elenco restituito da questa funzione può essere controllato dalla cartella Connessioni di rete: selezionare la voce di menu Impostazioni avanzate dal menu Avanzate. A partire da Windows 10, l'ordine non è specificato.

Le funzioni GetAdaptersInfo e GetInterfaceInfo non restituiscono informazioni sull'interfaccia di loopback IPv4. Le informazioni sull'interfaccia di loopback vengono restituite dalla funzione GetIpAddrTable .

In Windows XP e versioni successive: L'elenco di adattatori restituiti da GetAdaptersInfo include adattatori unidirezionali. Per generare un elenco di adattatori che possono inviare e ricevere dati, chiamare GetUniDirectionalAdapterInfo ed escludere gli adattatori restituiti dall'elenco restituito da GetAdaptersInfo.

Esempio

In questo esempio vengono recuperate le informazioni sull'adattatore e vengono stampate varie proprietà di ogni adattatore.

#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;
}

Requisiti

   
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione iphlpapi.h
Libreria Iphlpapi.lib
DLL Iphlpapi.dll

Vedi anche

GetAdaptersAddresses

GetInterfaceInfo

GetIpAddrTable

GetNumberOfInterfaces

GetUniDirectionalAdapterInfo

Informazioni di riferimento sulle funzioni helper IP

Pagina iniziale dell'helper IP

IP_ADAPTER_INFO