Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Функция IpReleaseAddress освобождает IPv4-адрес, ранее полученный по протоколу DHCP.
Синтаксис
IPHLPAPI_DLL_LINKAGE DWORD IpReleaseAddress(
[in] PIP_ADAPTER_INDEX_MAP AdapterInfo
);
Параметры
[in] AdapterInfo
Указатель на структуру IP_ADAPTER_INDEX_MAP , указывающую адаптер, связанный с IPv4-адресом для освобождения.
Возвращаемое значение
Если функция выполняется успешно, возвращаемое значение будет NO_ERROR.
Если функция завершается сбоем, используйте FormatMessage , чтобы получить строку сообщения для возвращаемой ошибки.
| Код возврата | Описание |
|---|---|
|
Один из параметров является недопустимым. Эта ошибка возвращается, если параметр AdapterInfo имеет значение NULL или если элемент Nameструктуры PIP_ADAPTER_INDEX_MAP , на который указывает параметр AdapterInfo , является недопустимым. |
|
Во время запроса к DHCP для освобождения IPv4-адреса возникло исключение. |
|
Используйте FormatMessage , чтобы получить строку сообщения для возвращенной ошибки. |
Комментарии
Функция IpReleaseAddress связана с протоколом IPv4 и освобождает только IPv4-адрес, ранее полученный с помощью протокола DHCP. Элемент Name структуры IP_ADAPTER_INDEX_MAP , на который указывает параметр AdapterInfo , является единственным элементом, используемым для определения освобождаемого DHCP-адреса.
Массив структур IP_ADAPTER_INDEX_MAP возвращается в структуре IP_INTERFACE_INFO функцией GetInterfaceInfo . Структура IP_INTERFACE_INFO , возвращаемая GetInterfaceInfo , содержит по крайней мере одну IP_ADAPTER_INDEX_MAP структуру, даже если элемент NumAdaptersструктуры IP_INTERFACE_INFO указывает, что сетевые адаптеры с протоколом IPv4 не включены. Если элемент NumAdapters структуры IP_INTERFACE_INFO , возвращаемой Командлетом GetInterfaceInfo , равен нулю, значение членов структуры IP_ADAPTER_INDEX_MAP , возвращаемой в структуре IP_INTERFACE_INFO , не определено.
Если элемент Name структуры IP_ADAPTER_INDEX_MAP , на который указывает параметр AdapterInfo , имеет значение 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 |
| Header | iphlpapi.h |
| Библиотека | Iphlpapi.lib |
| DLL | Iphlpapi.dll |
См. также раздел
Справочник по вспомогательным функциям IP