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
Declare un puntero a un objeto IP_INTERFACE_INFO denominado
pInfo
y un objeto ULONG denominadoulOutBufLen
. Declare también un objeto DWORD denominadodwRetVal
(usado para la comprobación de errores).ULONG ulOutBufLen; DWORD dwRetVal; unsigned int i; IP_INTERFACE_INFO* pInterfaceInfo;
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);
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 apInfo
. 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); }
Realice una segunda llamada a GetInterfaceInfo con comprobación de errores general y devuelva su valor a la variable
dwRetVal
DWORD (para una comprobación de errores más avanzada).if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) { printf(" GetInterfaceInfo failed with error: %d\n", dwRetVal); }
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
Adapter
IP_ADAPTER_INDEX_MAP es un WCHAR, que es una cadena Unicode.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