Partilhar 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 pInfo, bem como 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. Aloque memória para as estruturas.

    Observação

    O tamanho do ulOutBufLen não é suficiente para armazenar as informações. Veja o próximo passo.

     

        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 na variável ulOutBufLen.

    Observação

    Essa chamada para a função deve falhar e é usada para garantir que a variável ulOutBufLen especifique um tamanho suficiente para armazenar todas as informações retornadas para pInfo. Este é um modelo de programação comum no IP Helper para estruturas de dados e funções deste 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 geral de erros e retorne seu valor para a variável DWORDdwRetVal (para verificação de erros mais avançada).

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

            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

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

     

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

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

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

Etapa anterior: gerenciando adaptadores de rede usando GetAdaptersInfo