Compartilhar via


Gerenciando interfaces usando GetInterfaceInfo

A função GetInterfaceInfo preenche um ponteiro para uma estrutura IP_INTERFACE_INFO com informações sobre as interfaces associadas ao sistema.

Para usar GetInterfaceInfo

  1. Declare um ponteiro para um objeto IP_INTERFACE_INFO chamado pInfoe um objeto ULONG chamado ulOutBufLen. Declare também um objeto DWORD chamado dwRetVal (usado para verificação de erros).

        ULONG               ulOutBufLen;
        DWORD               dwRetVal;
        unsigned int       i;
    
        IP_INTERFACE_INFO*  pInterfaceInfo;
    
  2. Alocar memória para as estruturas.

    Observação

    O tamanho de ulOutBufLen não é suficiente para manter as informações. Consulte a próxima etapa.

     

        pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(sizeof (IP_INTERFACE_INFO));
        ulOutBufLen = sizeof(IP_INTERFACE_INFO);
    
    
  3. Faça uma chamada inicial para GetInterfaceInfo para obter o tamanho necessário para a ulOutBufLen variável.

    Observação

    Essa chamada para a função deve falhar e é usada para garantir que a ulOutBufLen variável especifique um tamanho suficiente para manter todas as informações retornadas para pInfo. Esse é um modelo de programação comum no Auxiliar de IP para estruturas de dados e funções desse tipo.

     

        if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) ==
            ERROR_INSUFFICIENT_BUFFER) {
            free(pInterfaceInfo);
            pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen);
        }
    
  4. Faça uma segunda chamada para GetInterfaceInfo com verificação de erro geral e retorne seu valor para a variável dwRetValDWORD (para verificação de erro mais avançada).

        if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) {
            printf("  GetInterfaceInfo failed with error: %d\n", dwRetVal);
        }
    
  5. Se a chamada tiver sido bem-sucedida, acesse os dados da pInfo estrutura de dados.

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

    Observação

    O %ws na primeira linha indica uma cadeia de caracteres larga. Isso é usado porque o atributo Name da estrutura AdapterIP_ADAPTER_INDEX_MAP é um WCHAR, que é uma cadeia de caracteres Unicode.

     

  6. Libere qualquer memória alocada para a estrutura pInfo .

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

Próxima etapa: gerenciar endereços IP usando GetIpAddrTable

Etapa anterior: gerenciando adaptadores de rede usando GetAdaptersInfo