다음을 통해 공유


IpReleaseAddress 함수(iphlpapi.h)

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

구문

IPHLPAPI_DLL_LINKAGE DWORD IpReleaseAddress(
  [in] PIP_ADAPTER_INDEX_MAP AdapterInfo
);

매개 변수

[in] AdapterInfo

해제할 IPv4 주소와 연결된 어댑터를 지정하는 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를 사용하여 반환된 오류에 대한 메시지 문자열을 가져옵니다.

설명

IpReleaseAddress 함수는 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이면 IpReleaseAddress 함수는 ERROR_INVALID_PARAMETER 반환합니다.

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

ipconfig /release6

ipconfig /renew6

예제

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

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

요구 사항

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

추가 정보

GetInterfaceInfo

IP 도우미 함수 참조

IP 도우미 시작 페이지

IP_ADAPTER_INDEX_MAP

IP_INTERFACE_INFO

IpRenewAddress