次の方法で共有


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
パラメーターの 1 つが無効です。 このエラーは、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 を持つネットワーク アダプターが有効になっていないことを示している場合でも、少なくとも 1 つの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
Library Iphlpapi.lib
[DLL] Iphlpapi.dll

こちらもご覧ください

GetInterfaceInfo

IP ヘルパー関数リファレンス

IP ヘルパーの開始ページ

IP_ADAPTER_INDEX_MAP

IP_INTERFACE_INFO

IpRenewAddress