ipRenewAddress 函式 (iphlpapi.h)
IpRenewAddress函式會更新先前透過動態主機設定通訊協定取得的 IPv4 位址租用, (DHCP) 。
語法
IPHLPAPI_DLL_LINKAGE DWORD IpRenewAddress(
[in] PIP_ADAPTER_INDEX_MAP AdapterInfo
);
參數
[in] AdapterInfo
IP_ADAPTER_INDEX_MAP結構的指標,指定要更新之 IP 位址相關聯的配接器。
傳回值
如果函式成功,傳回值會NO_ERROR。
如果函式失敗,請使用 FormatMessage 取得傳回錯誤的訊息字串。
傳回碼 | 描述 |
---|---|
|
其中一個參數無效。 如果AdapterInfo參數為Null,或AdapterInfo參數所指向之PIP_ADAPTER_INDEX_MAP結構的Name成員無效,就會傳回此錯誤。 |
|
要求 DHCP 以更新 IPv4 位址期間發生例外狀況。 |
|
使用 FormatMessage 取得傳回錯誤的訊息字串。 |
備註
IpRenewAddress函式專屬於 IPv4,而且只會更新先前透過動態主機設定通訊協定取得的 IPv4 位址, (DHCP) 。 AdapterInfo參數所指向之IP_ADAPTER_INDEX_MAP結構的Name成員是唯一用來判斷要更新之 DHCP 位址的成員。
getInterfaceInfo函式會在IP_INTERFACE_INFO結構中傳回IP_ADAPTER_INDEX_MAP結構的陣列。 GetInterfaceInfo所傳回的IP_INTERFACE_INFO結構至少包含一個IP_ADAPTER_INDEX_MAP結構,即使IP_INTERFACE_INFO結構的NumAdapters成員表示未啟用任何具有 IPv4 的網路介面卡也一樣。 當GetInterfaceInfo所傳回之IP_INTERFACE_INFO結構的NumAdapters成員為零時,未定義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 |