Compartir a través de


Administración de interfaces mediante GetInterfaceInfo

La función GetInterfaceInfo rellena un puntero a una estructura de IP_INTERFACE_INFO con información sobre las interfaces asociadas al sistema.

Para usar GetInterfaceInfo

  1. Declare un puntero a un objeto IP_INTERFACE_INFO denominado pInfoy un objeto ULONG denominado ulOutBufLen. Declare también un objeto DWORD denominado dwRetVal (usado para la comprobación de errores).

        ULONG               ulOutBufLen;
        DWORD               dwRetVal;
        unsigned int       i;
    
        IP_INTERFACE_INFO*  pInterfaceInfo;
    
  2. Asigne memoria para las estructuras.

    Nota

    El tamaño de ulOutBufLen no es suficiente para contener la información. Vea el paso siguiente.

     

        pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(sizeof (IP_INTERFACE_INFO));
        ulOutBufLen = sizeof(IP_INTERFACE_INFO);
    
    
  3. Realice una llamada inicial a GetInterfaceInfo para obtener el tamaño necesario en la ulOutBufLen variable.

    Nota

    Esta llamada a la función está pensada para producir un error y se usa para asegurarse de que la ulOutBufLen variable especifica un tamaño suficiente para contener toda la información devuelta a pInfo. Se trata de un modelo de programación común en el asistente de IP para estructuras de datos y funciones de este tipo.

     

        if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) ==
            ERROR_INSUFFICIENT_BUFFER) {
            free(pInterfaceInfo);
            pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen);
        }
    
  4. Realice una segunda llamada a GetInterfaceInfo con comprobación de errores general y devuelva su valor a la variable dwRetValDWORD (para una comprobación de errores más avanzada).

        if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) {
            printf("  GetInterfaceInfo failed with error: %d\n", dwRetVal);
        }
    
  5. Si la llamada se realizó correctamente, acceda a los datos de la pInfo estructura de datos.

            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 de la primera línea denota una cadena ancha. Esto se usa porque el atributo Name de la estructura AdapterIP_ADAPTER_INDEX_MAP es un WCHAR, que es una cadena Unicode.

     

  6. Libere cualquier memoria asignada para la estructura pInfo .

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

Paso siguiente: Administración de direcciones IP mediante GetIpAddrTable

Paso anterior: Administrar adaptadores de red mediante GetAdaptersInfo