IpRenewAddress-Funktion (iphlpapi.h)
Die IpRenewAddress-Funktion erneuert eine Lease für eine IPv4-Adresse, die zuvor über dhcp (Dynamic Host Configuration Protocol) abgerufen wurde.
Syntax
IPHLPAPI_DLL_LINKAGE DWORD IpRenewAddress(
[in] PIP_ADAPTER_INDEX_MAP AdapterInfo
);
Parameter
[in] AdapterInfo
Ein Zeiger auf eine IP_ADAPTER_INDEX_MAP-Struktur , die den Adapter angibt, der der zu erneuernden IP-Adresse zugeordnet ist.
Rückgabewert
Wenn die Funktion erfolgreich ist, wird der Rückgabewert NO_ERROR.
Wenn die Funktion fehlschlägt, verwenden Sie FormatMessage , um die Nachrichtenzeichenfolge für den zurückgegebenen Fehler abzurufen.
Rückgabecode | Beschreibung |
---|---|
|
Einer der Parameter ist ungültig. Dieser Fehler wird zurückgegeben, wenn der AdapterInfo-ParameterNULL ist oder wenn der Name-Member der PIP_ADAPTER_INDEX_MAP Struktur, auf die vom AdapterInfo-Parameter verwiesen wird, ungültig ist. |
|
Während der Anforderung an DHCP für die Verlängerung der IPv4-Adresse ist eine Ausnahme aufgetreten. |
|
Verwenden Sie FormatMessage , um die Nachrichtenzeichenfolge für den zurückgegebenen Fehler abzurufen. |
Hinweise
Die IpRenewAddress-Funktion ist IPv4-spezifisch und erneuert nur eine IPv4-Adresse, die zuvor über das Dynamic Host Configuration Protocol (DHCP) abgerufen wurde. Das Name-Element der IP_ADAPTER_INDEX_MAP Struktur, auf die der AdapterInfo-Parameter verweist, ist das einzige Element, das verwendet wird, um die zu erneuernde DHCP-Adresse zu bestimmen.
Ein Array von IP_ADAPTER_INDEX_MAP Strukturen wird in der IP_INTERFACE_INFO-Struktur von der GetInterfaceInfo-Funktion zurückgegeben. Die vonGetInterfaceInfo zurückgegebene IP_INTERFACE_INFO-Struktur enthält mindestens eine IP_ADAPTER_INDEX_MAP-Struktur , auch wenn das NumAdapters-Element der IP_INTERFACE_INFO-Struktur angibt, dass keine Netzwerkadapter mit IPv4 aktiviert sind. Wenn das NumAdapters-Element der vonGetInterfaceInfo zurückgegebenen IP_INTERFACE_INFO-Struktur 0 ist, ist der Wert der Elemente der einzelnen IP_ADAPTER_INDEX_MAP Struktur, die in der IP_INTERFACE_INFO-Struktur zurückgegeben werden, undefiniert.
Wenn das Name-Element der IP_ADAPTER_INDEX_MAP Struktur, auf die vom AdapterInfo-Parameter verwiesen wird , NULL ist, gibt die IpRenewAddress-FunktionERROR_INVALID_PARAMETER zurück.
Es sind keine Funktionen zum Freigeben oder Verlängern einer IPv6-Adresse verfügbar. Dies kann nur durch Ausführen des Befehls Ipconfig erfolgen:
ipconfig /release6
ipconfig /renew6
Beispiele
Im folgenden Beispiel wird die Liste der Netzwerkadapter abgerufen, für die IPv4 auf dem lokalen System aktiviert ist. Anschließend wird die IPv4-Adresse für den ersten Adapter in der Liste freigegeben und erneuert.
#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;
}
}
Anforderungen
Unterstützte Mindestversion (Client) | Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | iphlpapi.h |
Bibliothek | Iphlpapi.lib |
DLL | Iphlpapi.dll |