Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
La función IpRenewAddress renueva una concesión en una dirección IPv4 obtenida previamente a través del Protocolo de configuración dinámica de host (DHCP).
Sintaxis
IPHLPAPI_DLL_LINKAGE DWORD IpRenewAddress(
[in] PIP_ADAPTER_INDEX_MAP AdapterInfo
);
Parámetros
[in] AdapterInfo
Puntero a una estructura IP_ADAPTER_INDEX_MAP que especifica el adaptador asociado a la dirección IP que se va a renovar.
Valor devuelto
Si la función se realiza correctamente, el valor devuelto es NO_ERROR.
Si se produce un error en la función, use FormatMessage para obtener la cadena de mensaje para el error devuelto.
| Código devuelto | Descripción |
|---|---|
|
Uno de los parámetros no es válido. Este error se devuelve si el parámetro AdapterInfo es NULL o si el miembro Name de la estructura PIP_ADAPTER_INDEX_MAP a la que apunta el parámetro AdapterInfo no es válido. |
|
Se produjo una excepción durante la solicitud a DHCP para la renovación de la dirección IPv4. |
|
Use FormatMessage para obtener la cadena de mensaje del error devuelto. |
Comentarios
La función IpRenewAddress es específica de IPv4 y renueva solo una dirección IPv4 obtenida anteriormente a través del Protocolo de configuración dinámica de host (DHCP). El miembro Name de la estructura IP_ADAPTER_INDEX_MAP a la que apunta el parámetro AdapterInfo es el único miembro que se usa para determinar la dirección DHCP que se va a renovar.
La función GetInterfaceInfoIP_INTERFACE_INFO devuelve una matriz de estructuras de IP_ADAPTER_INDEX_MAP. La estructura IP_INTERFACE_INFO devuelta por GetInterfaceInfo contiene al menos una estructura de IP_ADAPTER_INDEX_MAP , incluso si el miembro NumAdapters de la estructura IP_INTERFACE_INFO indica que no hay adaptadores de red con IPv4 habilitados. Cuando el miembro NumAdapters de la estructura de IP_INTERFACE_INFO devuelto por GetInterfaceInfo es cero, el valor de los miembros de la estructura de IP_ADAPTER_INDEX_MAP única devuelta en la estructura IP_INTERFACE_INFO es indefinido.
Si el miembro Name de la estructura IP_ADAPTER_INDEX_MAP a la que apunta el parámetro AdapterInfo es NULL, la función IpRenewAddress devuelve ERROR_INVALID_PARAMETER.
No hay funciones disponibles para liberar o renovar una dirección IPv6. Esto solo se puede hacer ejecutando el comando Ipconfig:
ipconfig /release6
ipconfig /renew6
Ejemplos
En el ejemplo siguiente se recupera la lista de adaptadores de red con IPv4 habilitado en el sistema local y, a continuación, se libera y renueva la dirección IPv4 para el primer adaptador de la lista.
#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>
#pragma comment(lib, "iphlpapi.lib")
/* Note: could also use malloc() and free() */
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
void main()
{
// Before calling IpReleaseAddress and IpRenewAddress we use
// GetInterfaceInfo to retrieve a handle to the adapter
PIP_INTERFACE_INFO pInfo;
pInfo = (IP_INTERFACE_INFO *) MALLOC( sizeof(IP_INTERFACE_INFO) );
ULONG ulOutBufLen = 0;
DWORD dwRetVal = 0;
// Make an initial call to GetInterfaceInfo to get
// the necessary size into the ulOutBufLen variable
if ( GetInterfaceInfo(pInfo, &ulOutBufLen) == ERROR_INSUFFICIENT_BUFFER) {
FREE(pInfo);
pInfo = (IP_INTERFACE_INFO *) MALLOC (ulOutBufLen);
}
// Make a second call to GetInterfaceInfo to get the
// actual data we want
if ((dwRetVal = GetInterfaceInfo(pInfo, &ulOutBufLen)) == NO_ERROR ) {
printf("\tAdapter Name: %ws\n", pInfo->Adapter[0].Name);
printf("\tAdapter Index: %ld\n", pInfo->Adapter[0].Index);
printf("\tNum Adapters: %ld\n", pInfo->NumAdapters);
}
else if (dwRetVal == ERROR_NO_DATA) {
printf("There are no network adapters with IPv4 enabled on the local system\n");
FREE(pInfo);
pInfo = NULL;
return;
}
else {
printf("GetInterfaceInfo failed.\n");
LPVOID lpMsgBuf;
if (FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dwRetVal,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL )) {
printf("\tError: %s", lpMsgBuf);
}
LocalFree( lpMsgBuf );
return;
}
// Call IpReleaseAddress and IpRenewAddress to release and renew
// the IP address on the first network adapter returned
// by the call to GetInterfaceInfo.
if ((dwRetVal = IpReleaseAddress(&pInfo->Adapter[0])) == NO_ERROR) {
printf("IP release succeeded.\n");
}
else {
printf("IP release failed.\n");
}
if ((dwRetVal = IpRenewAddress(&pInfo->Adapter[0])) == NO_ERROR) {
printf("IP renew succeeded.\n");
}
else {
printf("IP renew failed.\n");
}
/* Free allocated memory no longer needed */
if (pInfo) {
FREE(pInfo);
pInfo = NULL;
}
}
Requisitos
| Cliente mínimo compatible | Windows 2000 Professional [solo aplicaciones de escritorio] |
| Servidor mínimo compatible | Windows 2000 Server [solo aplicaciones de escritorio] |
| Plataforma de destino | Windows |
| Encabezado | iphlpapi.h |
| Library | Iphlpapi.lib |
| Archivo DLL | Iphlpapi.dll |
Consulte también
Referencia de la función auxiliar de IP