Função IpReleaseAddress (iphlpapi.h)
A função IpReleaseAddress libera um endereço IPv4 obtido anteriormente por meio do DHCP (Dynamic Host Configuration Protocol).
Sintaxe
IPHLPAPI_DLL_LINKAGE DWORD IpReleaseAddress(
[in] PIP_ADAPTER_INDEX_MAP AdapterInfo
);
Parâmetros
[in] AdapterInfo
Um ponteiro para uma estrutura IP_ADAPTER_INDEX_MAP que especifica o adaptador associado ao endereço IPv4 a ser liberado.
Retornar valor
Se a função for bem-sucedida, o valor retornado será NO_ERROR.
Se a função falhar, use FormatMessage para obter a cadeia de caracteres de mensagem para o erro retornado.
Código de retorno | Descrição |
---|---|
|
Um dos parâmetros é inválido. Esse erro será retornado se o parâmetro AdapterInfo for NULL ou se o membro Name da estrutura PIP_ADAPTER_INDEX_MAP apontada pelo parâmetro AdapterInfo for inválido. |
|
Ocorreu uma exceção durante a solicitação ao DHCP para a versão do endereço IPv4. |
|
Use FormatMessage para obter a cadeia de caracteres de mensagem para o erro retornado. |
Comentários
A função IpReleaseAddress é específica do IPv4 e libera apenas um endereço IPv4 obtido anteriormente por meio do DHCP (Dynamic Host Configuration Protocol). O membro Name da estrutura IP_ADAPTER_INDEX_MAP apontado pelo parâmetro AdapterInfo é o único membro usado para determinar o endereço DHCP a ser liberado.
Uma matriz de estruturas IP_ADAPTER_INDEX_MAP é retornada na estrutura IP_INTERFACE_INFO pela função GetInterfaceInfo . A estrutura IP_INTERFACE_INFO retornada por GetInterfaceInfo contém pelo menos uma estrutura IP_ADAPTER_INDEX_MAP mesmo que o membro NumAdapters da estrutura IP_INTERFACE_INFO indique que nenhum adaptador de rede com IPv4 está habilitado. Quando o membro NumAdapters da estrutura IP_INTERFACE_INFO retornado por GetInterfaceInfo é zero, o valor dos membros da estrutura de IP_ADAPTER_INDEX_MAP única retornada na estrutura IP_INTERFACE_INFO é indefinido.
Se o membro Name da estrutura IP_ADAPTER_INDEX_MAP apontado pelo parâmetro AdapterInfo for NULL, a função IpReleaseAddress retornará ERROR_INVALID_PARAMETER.
Não há funções disponíveis para liberar ou renovar um endereço IPv6. Isso só pode ser feito executando o comando Ipconfig:
ipconfig /release6
ipconfig /renew6
Exemplos
O exemplo a seguir recupera a lista de adaptadores de rede com IPv4 habilitado no sistema local e, em seguida, libera e renova o endereço IPv4 para o primeiro adaptador da lista.
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#pragma comment(lib, "iphlpapi.lib")
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
// Before calling IpReleaseAddress and IpRenewAddress we use
// GetInterfaceInfo to retrieve a handle to the adapter
void __cdecl main()
{
ULONG ulOutBufLen = 0;
DWORD dwRetVal = 0;
PIP_INTERFACE_INFO pInfo;
pInfo = (IP_INTERFACE_INFO *) MALLOC(sizeof(IP_INTERFACE_INFO));
// 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");
return;
}
else {
LPVOID lpMsgBuf;
printf("GetInterfaceInfo failed.\n");
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: %ld\n", dwRetVal);
}
if ((dwRetVal = IpRenewAddress(&pInfo->Adapter[0])) == NO_ERROR) {
printf("IP renew succeeded.\n");
}
else {
printf("IP renew failed: %ld\n", dwRetVal);
}
// Free memory for IP_INTERFACE_INFO
if (pInfo != NULL) {
FREE(pInfo);
}
return;
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 2000 Professional [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows 2000 Server [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | iphlpapi.h |
Biblioteca | Iphlpapi.lib |
DLL | Iphlpapi.dll |
Confira também
Referência de função auxiliar de IP