다음을 통해 공유


IpRenewAddress 함수(iphlpapi.h)

IpRenewAddress 함수는 이전에 DHCP(동적 호스트 구성 프로토콜)를 통해 가져온 IPv4 주소에 대한 임대를 갱신합니다.

구문

IPHLPAPI_DLL_LINKAGE DWORD IpRenewAddress(
  [in] PIP_ADAPTER_INDEX_MAP AdapterInfo
);

매개 변수

[in] AdapterInfo

갱신할 IP 주소와 연결된 어댑터를 지정하는 IP_ADAPTER_INDEX_MAP 구조체에 대한 포인터입니다.

반환 값

함수가 성공하면 반환 값이 NO_ERROR.

함수가 실패하면 FormatMessage를 사용하여 반환된 오류에 대한 메시지 문자열을 가져옵니다.

반환 코드 설명
ERROR_INVALID_PARAMETER
매개 변수 중 하나가 잘못되었습니다. AdapterInfo 매개 변수가 NULL이거나 AdapterInfo 매개 변수가 가리키는 PIP_ADAPTER_INDEX_MAP 구조체의 Name 멤버가 잘못된 경우 이 오류가 반환됩니다.
ERROR_PROC_NOT_FOUND
IPv4 주소 갱신을 위해 DHCP에 요청하는 동안 예외가 발생했습니다.
기타
FormatMessage를 사용하여 반환된 오류에 대한 메시지 문자열을 가져옵니다.

설명

IpRenewAddress 함수는 IPv4와 관련이 있으며 DHCP(동적 호스트 구성 프로토콜)를 통해 이전에 가져온 IPv4 주소만 갱신합니다. AdapterInfo 매개 변수가 가리키는 IP_ADAPTER_INDEX_MAP 구조체의 Name 멤버는 갱신할 DHCP 주소를 결정하는 데 사용되는 유일한 멤버입니다.

IP_ADAPTER_INDEX_MAP 구조체의 배열은 GetInterfaceInfo 함수에 의해 IP_INTERFACE_INFO 구조체에 반환됩니다. GetInterfaceInfo에서 반환된 IP_INTERFACE_INFO 구조체에는 IP_INTERFACE_INFO 구조체의 NumAdapters 멤버가 IPv4를 사용하는 네트워크 어댑터가 사용하도록 설정되어 있지 않음을 나타내는 경우에도 하나 이상의 IP_ADAPTER_INDEX_MAP 구조가 포함됩니다. GetInterfaceInfo에서 반환된 IP_INTERFACE_INFO 구조체의 NumAdapters 멤버가 0이면 IP_INTERFACE_INFO 구조체에 반환된 단일 IP_ADAPTER_INDEX_MAP 구조체의 멤버 값이 정의되지 않습니다.

AdapterInfo 매개 변수가 가리키는 IP_ADAPTER_INDEX_MAP 구조체의 Name 멤버가 NULL이면 IpRenewAddress 함수는 ERROR_INVALID_PARAMETER 반환합니다.

IPv6 주소를 해제하거나 갱신하는 데 사용할 수 있는 함수는 없습니다. 이 작업은 Ipconfig 명령을 실행해야만 수행할 수 있습니다.

ipconfig /release6

ipconfig /renew6

예제

다음 예제에서는 로컬 시스템에서 IPv4를 사용하도록 설정된 네트워크 어댑터 목록을 검색한 다음 목록의 첫 번째 어댑터에 대한 IPv4 주소를 해제하고 갱신합니다.

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


요구 사항

   
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 iphlpapi.h
라이브러리 Iphlpapi.lib
DLL Iphlpapi.dll

참고 항목

GetInterfaceInfo

IP 도우미 함수 참조

IP 도우미 시작 페이지

IP_ADAPTER_INDEX_MAP

IP_INTERFACE_INFO

IpReleaseAddress