Gerenciar concessões DHCP com IpReleaseAddress, IpRenewAddress
As funções IpReleaseAddress e IpRenewAddress são usadas para liberar e renovar a concessão atual do DHCP (Dynamic Host Configuration Protocol). A função IpReleaseAddress libera um endereço IPv4 obtido anteriormente por meio do DHCP. A função IpRenewAddress renova uma concessão em um endereço IPv4 obtido anteriormente por meio do DHCP. É comum usar essas duas funções juntas, primeiro liberando a concessão com uma chamada para IpReleaseAddress e, em seguida, renovando a concessão com uma chamada para a função IpRenewAddress .
Quando um cliente DHCP obteve anteriormente uma concessão DHCP e IpReleaseAddress não é chamado antes da função IpRenewAddress , a solicitação de cliente DHCP é enviada ao servidor DHCP que emitiu a concessão inicial do DHCP. Esse servidor DHCP pode não estar disponível ou a solicitação DHCP pode falhar. Quando um host obteve anteriormente uma concessão DHCP e IpReleaseAddress é chamado antes da função IpRenewAddress , o cliente DHCP primeiro libera o endereço IP obtido e envia uma solicitação de cliente DHCP para uma resposta de qualquer servidor DHCP disponível.
Observação
As funções IpReleaseAddress e IpRenewAddress exigem que o DHCP seja habilitado para ser executado corretamente.
A função IpReleaseAddress usa um ponteiro para uma estrutura IP_ADAPTER_INDEX_MAP como seu único parâmetro. Para obter esse parâmetro, primeiro chame GetInterfaceInfo. Para obter ajuda com a função GetInterfaceInfo , consulte Gerenciando interfaces usando GetInterfaceInfo.
Para usar IpReleaseAddress
Obtenha um ponteiro para uma estrutura IP_ADAPTER_INDEX_MAP usando a função GetInterfaceInfo . (Para obter ajuda com a função GetInterfaceInfo, consulte Gerenciando interfaces usando GetInterfaceInfo). Crie um objeto
dwRetVal
DWORD (usado para verificação de erros). Supõe-se que a variável retornada por GetInterfaceInfo é chamadapInfo
de .DWORD dwRetVal;
Se o DHCP estiver habilitado, chame a função IpReleaseAddress, passando a variável
Adapter
IP_ADAPTER_INDEX_MAP como seu parâmetro. Verifique se há erros gerais e retorne seu valor para a variáveldwRetVal
DWORD (para verificação de erros mais abrangente).Observação
A função GetAdaptersInfo retorna um parâmetro que pode ser usado para marcar se o DHCP está habilitado antes de chamar essas funções. Para obter ajuda com GetAdaptersInfo, consulte Gerenciando adaptadores de rede usando GetAdaptersInfo.
if ((dwRetVal = IpReleaseAddress(&pInfo->Adapter[0])) == NO_ERROR) { printf("Ip Release succeeded.\n"); }
Observação
É comum usar essas duas funções juntas, chamando a função IpReleaseAddress e chamando a função IpRenewAddress , passando a mesma estrutura que o parâmetro para ambas as funções. O procedimento a seguir pressupõe que as funções não são usadas juntas; no entanto, se as funções forem usadas juntas, ignore a etapa 1.
Para usar IpRenewAddress
Obtenha um ponteiro para uma estrutura IP_ADAPTER_INDEX_MAP usando a função GetInterfaceInfo . (Para obter ajuda com a função GetInterfaceInfo , consulte Gerenciando interfaces usando GetInterfaceInfo). Declare um objeto
dwRetVal
DWORD (usado para verificação de erros) se essa variável não tiver sido declarada. Supõe-se que a variável retornada por GetInterfaceInfo é chamadapInfo
de .DWORD dwRetVal;
Chame a função IpRenewAddress, passando a variável
Adapter
IP_ADAPTER_INDEX_MAP como seu parâmetro. Verifique se há erros gerais e retorne seu valor para a variáveldwRetVal
DWORD (para verificação de erros mais abrangente).if ((dwRetVal = IpRenewAddress(&pInfo->Adapter[0])) == NO_ERROR) { printf("Ip Renew succeeded.\n"); }
Próxima etapa: gerenciar endereços IP usando AddIPAddress e DeleteIPAddress
Etapa anterior: gerenciando endereços IP usando GetIpAddrTable