Condividi tramite


Gestione delle interfacce tramite GetInterfaceInfo

La funzione GetInterfaceInfo riempie un puntatore a una struttura IP_INTERFACE_INFO con informazioni sulle interfacce associate al sistema.

Per usare GetInterfaceInfo

  1. Dichiarare un puntatore a un oggetto IP_INTERFACE_INFO denominato pInfoe a un oggetto ULONG denominato ulOutBufLen. Dichiarare anche un oggetto DWORD denominato dwRetVal (usato per il controllo degli errori).

        ULONG               ulOutBufLen;
        DWORD               dwRetVal;
        unsigned int       i;
    
        IP_INTERFACE_INFO*  pInterfaceInfo;
    
  2. Allocare memoria per le strutture.

    Nota

    Le dimensioni di ulOutBufLen non sono sufficienti per contenere le informazioni. Vedere il passaggio successivo.

     

        pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(sizeof (IP_INTERFACE_INFO));
        ulOutBufLen = sizeof(IP_INTERFACE_INFO);
    
    
  3. Effettuare una chiamata iniziale a GetInterfaceInfo per ottenere le dimensioni necessarie nella ulOutBufLen variabile.

    Nota

    Questa chiamata alla funzione deve avere esito negativo e viene usata per garantire che la ulOutBufLen variabile specifichi una dimensione sufficiente per contenere tutte le informazioni restituite a pInfo. Si tratta di un modello di programmazione comune nell'helper IP per le strutture di dati e le funzioni di questo tipo.

     

        if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) ==
            ERROR_INSUFFICIENT_BUFFER) {
            free(pInterfaceInfo);
            pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen);
        }
    
  4. Effettuare una seconda chiamata a GetInterfaceInfo con il controllo degli errori generale e restituirne il valore alla variabile dwRetValDWORD (per un controllo degli errori più avanzato).

        if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) {
            printf("  GetInterfaceInfo failed with error: %d\n", dwRetVal);
        }
    
  5. Se la chiamata ha avuto esito positivo, accedere ai dati dalla struttura dei pInfo dati.

            printf("  GetInterfaceInfo succeeded.\n");
    
            printf("  Num Adapters: %ld\n\n", pInterfaceInfo->NumAdapters);
            for (i = 0; i < (unsigned int) pInterfaceInfo->NumAdapters; i++) {
                printf("  Adapter Index[%d]: %ld\n", i,
                       pInterfaceInfo->Adapter[i].Index);
                printf("  Adapter Name[%d]:  %ws\n\n", i,
                       pInterfaceInfo->Adapter[i].Name);
            }
        }
    

    Nota

    %ws nella prima riga indica una stringa wide. Viene usato perché l'attributo Name della struttura AdapterIP_ADAPTER_INDEX_MAP è un WCHAR, ovvero una stringa Unicode.

     

  6. Liberare qualsiasi memoria allocata per la struttura pInfo .

        if (pInterfaceInfo) {
            free(pInterfaceInfo);
            pInterfaceInfo = NULL;
        }
    

Passaggio successivo: Gestione degli indirizzi IP tramite GetIpAddrTable

Passaggio precedente: Gestione delle schede di rete tramite GetAdaptersInfo