IpRenewAddress 함수(iphlpapi.h)
IpRenewAddress 함수는 이전에 DHCP(동적 호스트 구성 프로토콜)를 통해 가져온 IPv4 주소에 대한 임대를 갱신합니다.
구문
IPHLPAPI_DLL_LINKAGE DWORD IpRenewAddress(
[in] PIP_ADAPTER_INDEX_MAP AdapterInfo
);
매개 변수
[in] AdapterInfo
갱신할 IP 주소와 연결된 어댑터를 지정하는 IP_ADAPTER_INDEX_MAP 구조체에 대한 포인터입니다.
반환 값
함수가 성공하면 반환 값이 NO_ERROR.
함수가 실패하면 FormatMessage를 사용하여 반환된 오류에 대한 메시지 문자열을 가져옵니다.
반환 코드 | 설명 |
---|---|
|
매개 변수 중 하나가 잘못되었습니다. AdapterInfo 매개 변수가 NULL이거나 AdapterInfo 매개 변수가 가리키는 PIP_ADAPTER_INDEX_MAP 구조체의 Name 멤버가 잘못된 경우 이 오류가 반환됩니다. |
|
IPv4 주소 갱신을 위해 DHCP에 요청하는 동안 예외가 발생했습니다. |
|
FormatMessage를 사용하여 반환된 오류에 대한 메시지 문자열을 가져옵니다. |
설명
IpRenewAddress 함수는 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이면 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 |