estructura IP_ADAPTER_INFO (iptypes.h)

La estructura IP_ADAPTER_INFO contiene información sobre un adaptador de red determinado en el equipo local.

Sintaxis

typedef struct _IP_ADAPTER_INFO {
  struct _IP_ADAPTER_INFO *Next;
  DWORD                   ComboIndex;
  char                    AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
  char                    Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
  UINT                    AddressLength;
  BYTE                    Address[MAX_ADAPTER_ADDRESS_LENGTH];
  DWORD                   Index;
  UINT                    Type;
  UINT                    DhcpEnabled;
  PIP_ADDR_STRING         CurrentIpAddress;
  IP_ADDR_STRING          IpAddressList;
  IP_ADDR_STRING          GatewayList;
  IP_ADDR_STRING          DhcpServer;
  BOOL                    HaveWins;
  IP_ADDR_STRING          PrimaryWinsServer;
  IP_ADDR_STRING          SecondaryWinsServer;
  time_t                  LeaseObtained;
  time_t                  LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;

Members

Next

Tipo: estructura _IP_ADAPTER_INFO*

Puntero al siguiente adaptador de la lista de adaptadores.

ComboIndex

Tipo: DWORD

Reservado.

AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]

Tipo: char[MAX_ADAPTER_NAME_LENGTH + 4]

Cadena de caracteres ANSI del nombre del adaptador.

Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]

Tipo: char[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]

Cadena de caracteres ANSI que contiene la descripción del adaptador.

AddressLength

Tipo: UINT

Longitud, en bytes, de la dirección de hardware del adaptador.

Address[MAX_ADAPTER_ADDRESS_LENGTH]

Tipo: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]

Dirección de hardware del adaptador representado como una matriz BYTE .

Index

Tipo: DWORD

Índice del adaptador.

El índice del adaptador puede cambiar cuando un adaptador está deshabilitado y, a continuación, habilitado, o en otras circunstancias, y no debe considerarse persistente.

Type

Tipo: UINT

Tipo de adaptador. Los valores posibles para el tipo de adaptador se enumeran en el archivo de encabezado Ipifcons.h .

En la tabla siguiente se enumeran los valores comunes para el tipo de adaptador, aunque otros valores son posibles en Windows Vista y versiones posteriores.

Valor Significado
MIB_IF_TYPE_OTHER
1
Otro tipo de interfaz de red.
MIB_IF_TYPE_ETHERNET
6
Una interfaz de red Ethernet.
IF_TYPE_ISO88025_TOKENRING
9
MIB_IF_TYPE_TOKENRING
MIB_IF_TYPE_PPP
23
Una interfaz de red PPP.
MIB_IF_TYPE_LOOPBACK
24
Una interfaz de red de bucle invertido de software.
MIB_IF_TYPE_SLIP
28
Una interfaz de red ATM.
IF_TYPE_IEEE80211
71
Interfaz de red inalámbrica IEEE 802.11.
Nota Este tipo de adaptador se devuelve en Windows Vista y versiones posteriores. En Windows Server 2003 y Windows XP, una interfaz de red inalámbrica IEEE 802.11 devuelve un tipo de adaptador de MIB_IF_TYPE_ETHERNET.
 

DhcpEnabled

Tipo: UINT

Valor de opción que especifica si el protocolo de configuración dinámica de host (DHCP) está habilitado para este adaptador.

CurrentIpAddress

Tipo: PIP_ADDR_STRING

Reservado.

IpAddressList

Tipo: IP_ADDR_STRING

La lista de direcciones IPv4 asociadas a este adaptador representada como una lista vinculada de estructuras de IP_ADDR_STRING . Un adaptador puede tener varias direcciones IPv4 asignadas.

GatewayList

Tipo: IP_ADDR_STRING

Dirección IPv4 de la puerta de enlace de este adaptador representada como una lista vinculada de estructuras de IP_ADDR_STRING . Un adaptador puede tener asignadas varias direcciones de puerta de enlace IPv4. Esta lista normalmente contiene una única entrada para la dirección IPv4 de la puerta de enlace predeterminada para este adaptador.

DhcpServer

Tipo: IP_ADDR_STRING

Dirección IPv4 del servidor DHCP para este adaptador representado como una lista vinculada de estructuras de IP_ADDR_STRING . Esta lista contiene una única entrada para la dirección IPv4 del servidor DHCP para este adaptador. Un valor de 255.255.255.255 indica que no se pudo alcanzar el servidor DHCP o está en proceso de alcanzarse.

Este miembro solo es válido cuando el miembro DhcpEnabled es distinto de cero.

HaveWins

Tipo: BOOL

Valor de opción que especifica si este adaptador usa el Servicio de nombres de Internet de Windows (WINS).

PrimaryWinsServer

Tipo: IP_ADDR_STRING

Dirección IPv4 del servidor WINS principal representado como una lista vinculada de estructuras de IP_ADDR_STRING . Esta lista contiene una única entrada para la dirección IPv4 del servidor WINS principal para este adaptador.

Este miembro solo es válido cuando el miembro HaveWins es TRUE.

SecondaryWinsServer

Tipo: IP_ADDR_STRING

Dirección IPv4 del servidor WINS secundario representado como una lista vinculada de estructuras de IP_ADDR_STRING . Un adaptador puede tener varias direcciones de servidor WINS secundarias asignadas.

Este miembro solo es válido cuando el miembro HaveWins es TRUE.

LeaseObtained

Tipo: time_t

Hora a la que se obtuvo la concesión DHCP actual.

Este miembro solo es válido cuando el miembro DhcpEnabled es distinto de cero.

LeaseExpires

Tipo: time_t

Hora a la que expira la concesión DHCP actual.

Este miembro solo es válido cuando el miembro DhcpEnabled es distinto de cero.

Comentarios

La estructura de IP_ADAPTER_INFO se limita a la información de IPv4 sobre un adaptador de red determinado en el equipo local. La estructura IP_ADAPTER_INFO se recupera mediante una llamada a la función GetAdaptersInfo .

Cuando se usa Visual Studio 2005 y versiones posteriores, el tipo de datos time_t tiene como valor predeterminado un tipo de datos de 8 bytes, no el tipo de datos de 4 bytes usado para los miembros LeaseObtained y LeaseExpires en una plataforma de 32 bits. Para usar correctamente la estructura de IP_ADAPTER_INFO en una plataforma de 32 bits, defina _USE_32BIT_TIME_T (use -D _USE_32BIT_TIME_T como opción, por ejemplo) al compilar la aplicación para forzar el tipo de datos de time_t a un tipo de datos de 4 bytes.

Para su uso en Windows XP y versiones posteriores, la estructura de IP_ADAPTER_ADDRESSES contiene información de IPv4 e IPv6. La función GetAdaptersAddresses recupera información del adaptador IPv4 e IPv6.

Ejemplos

En este ejemplo se recupera la información del adaptador y se imprimen varias propiedades de cada adaptador.

#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("Lookback\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;
}

Requisitos

   
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado iptypes.h (incluya Iphlpapi.h)

Consulte también

GetAdaptersAddresses

GetAdaptersInfo

Página de inicio del asistente de IP

Estructuras auxiliares de IP

IP_ADAPTER_ADDRESSES

IP_ADDRESS_STRING

IP_ADDR_STRING