Administración de adaptadores de red mediante GetAdaptersInfo
La función GetAdaptersInfo rellena un puntero a una estructura de IP_ADAPTER_INFO con información sobre los adaptadores de red asociados al sistema.
Para usar GetAdaptersInfo
Declare un puntero a una variable de IP_ADAPTER_INFO denominada pAdapterInfo y una variable ULONG denominada ulOutBufLen. Estas variables se pasan como parámetros a la función GetAdaptersInfo . Cree también una variable DWORD denominada dwRetVal (para la comprobación de errores).
IP_ADAPTER_INFO *pAdapterInfo; ULONG ulOutBufLen; DWORD dwRetVal;
Asigne memoria para las estructuras.
pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) ); ulOutBufLen = sizeof(IP_ADAPTER_INFO);
Realice una llamada inicial a GetAdaptersInfo para obtener el tamaño necesario en la variable ulOutBufLen .
Nota
Esta llamada a la función está pensada para producir un error y se usa para asegurarse de que la variable ulOutBufLen especifica un tamaño suficiente para contener toda la información devuelta a pAdapterInfo. Se trata de un modelo de programación común para estructuras de datos y funciones de este tipo.
if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) { free (pAdapterInfo); pAdapterInfo = (IP_ADAPTER_INFO *) malloc ( ulOutBufLen ); }
Realice una segunda llamada a GetAdaptersInfo, pasando pAdapterInfo y ulOutBufLen como parámetros y comprobando errores generales. Devuelve su valor a la variable DWORD dwRetVal (para una comprobación de errores más extensa).
if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) != ERROR_SUCCESS) { printf("GetAdaptersInfo call failed with %d\n", dwRetVal); }
Si la llamada se realizó correctamente, acceda a algunos de los datos de la estructura pAdapterInfo .
PIP_ADAPTER_INFO pAdapter = pAdapterInfo; while (pAdapter) { printf("Adapter Name: %s\n", pAdapter->AdapterName); printf("Adapter Desc: %s\n", pAdapter->Description); printf("\tAdapter Addr: \t"); for (UINT 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("IP Address: %s\n", pAdapter->IpAddressList.IpAddress.String); printf("IP Mask: %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\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String); } else printf("\tDHCP Enabled: No\n"); pAdapter = pAdapter->Next; }
Libere cualquier memoria asignada para la estructura pAdapterInfo .
if (pAdapterInfo) free(pAdapterInfo);
Paso siguiente: Administración de interfaces mediante GetInterfaceInfo
Paso anterior: Recuperar información mediante GetNetworkParams