Compartilhar via


Função IpRenewAddress (iphlpapi.h)

A função IpRenewAddress renova uma concessão em um endereço IPv4 obtido anteriormente por meio do DHCP (Dynamic Host Configuration Protocol).

Sintaxe

IPHLPAPI_DLL_LINKAGE DWORD IpRenewAddress(
  [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 IP a ser renovado.

Valor retornado

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
ERROR_INVALID_PARAMETER
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.
ERROR_PROC_NOT_FOUND
Ocorreu uma exceção durante a solicitação ao DHCP para a renovação do endereço IPv4.
Outros
Use FormatMessage para obter a cadeia de caracteres de mensagem para o erro retornado.

Comentários

A função IpRenewAddress é específica do IPv4 e renova apenas um endereço IPv4 obtido anteriormente por meio do DHCP (Dynamic Host Configuration Protocol). O membro Name da estrutura de IP_ADAPTER_INDEX_MAP apontado pelo parâmetro AdapterInfo é o único membro usado para determinar o endereço DHCP a ser renovado.

Uma matriz de estruturas IP_ADAPTER_INDEX_MAP são retornadas 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 IpRenewAddress 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.

#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 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

GetInterfaceInfo

Referência de função auxiliar de IP

Página Inicial do Auxiliar de IP

IP_ADAPTER_INDEX_MAP

IP_INTERFACE_INFO

IpReleaseAddress