다음을 통해 공유


DeleteIpForwardEntry 함수(iphlpapi.h)

DeleteIpForwardEntry 함수는 로컬 컴퓨터의 IPv4 라우팅 테이블에서 기존 경로를 삭제합니다.

구문

IPHLPAPI_DLL_LINKAGE DWORD DeleteIpForwardEntry(
  [in] PMIB_IPFORWARDROW pRoute
);

매개 변수

[in] pRoute

MIB_IPFORWARDROW 구조체에 대한 포인터입니다. 이 구조체는 삭제할 경로를 식별하는 정보를 지정합니다. 호출자는 구조체의 dwForwardIfIndex, dwForwardDest, dwForwardMask, dwForwardNextHopdwForwardProto 멤버에 대한 값을 지정해야 합니다.

반환 값

함수는 루틴이 성공하면 NO_ERROR (0)을 반환합니다.

함수가 실패하면 반환 값은 다음 오류 코드 중 하나입니다.

오류 코드 의미
ERROR_ACCESS_DENIED
액세스가 거부되었습니다. 이 오류는 다음을 포함하는 여러 조건에서 Windows Vista 및 Windows Server 2008에서 반환됩니다. 사용자가 로컬 컴퓨터에 필요한 관리 권한이 없거나 애플리케이션이 기본 제공 관리자(RunAs 관리자)로 향상된 셸에서 실행되고 있지 않습니다.
ERROR_INVALID_PARAMETER
입력 매개 변수가 잘못되었으며 아무 작업도 수행되지 않았습니다. pRoute 매개 변수가 NULL이거나, PMIB_IPFORWARDROW 구조체의 dwForwardMask 멤버가 유효한 IPv4 서브넷 마스크가 아니거나, dwForwardIfIndex 멤버가 NULL이거나, MIB_IPFORWARDROW 구조체의 다른 멤버 중 하나가 잘못된 경우 이 오류가 반환됩니다.
ERROR_NOT_FOUND
pRoute 매개 변수는 존재하지 않는 경로 항목을 가리킵니다.
ERROR_NOT_SUPPORTED
IPv4 전송이 로컬 컴퓨터에 구성되지 않았습니다.
(기타)
함수는 다른 오류 코드를 반환할 수 있습니다.
 

함수가 실패하면 FormatMessage를 사용하여 반환된 오류에 대한 메시지 문자열을 가져옵니다.

설명

경로 매개 변수에 의해 에 대한 MIB_IPFORWARDROW 구조체 포인터의 dwForwardProto 멤버를 MIB_IPPROTO_NETMGMT 설정해야 합니다. 그렇지 않으면 DeleteIpForwardEntry가 실패합니다. 라우팅 프로토콜 식별자는 지정된 라우팅 프로토콜에 대한 경로 정보를 식별하는 데 사용됩니다. 예를 들어 MIB_IPPROTO_NETMGMT DHCP(동적 호스트 구성 프로토콜), SNMP(Simple Network Management Protocol) 또는 CreateIpForwardEntry, DeleteIpForwardEntry 또는 SetIpForwardEntry 함수 호출과 같은 네트워크 관리를 통해 설정된 IP 라우팅에 대한 경로 정보를 식별하는 데 사용됩니다.

Windows Vista 및 Windows Server 2008에서 DeleteIpForwardEntry 는 단일 하위 인터페이스가 있는 인터페이스에서만 작동합니다(인터페이스 LUID 및 하위 표면 LUID가 동일함). MIB_IPFORWARDROW 구조체의 dwForwardIfIndex 멤버는 인터페이스를 지정합니다.

경로 매개 변수가 가리키는 MIB_IPFORWARDROW 구조체의 여러 멤버는 현재 CreateIpForwardEntry에서 사용되지 않습니다. 이러한 멤버에는 dwForwardPolicy, dwForwardType, dwForwardAge, dwForwardNextHopAS, dwForwardMetric1, dwForwardMetric2, dwForwardMetric3, dwForwardMetric4dwForwardMetric5가 포함됩니다.

IPv4 라우팅 테이블에서 기존 경로를 수정하려면 SetIpForwardEntry 함수를 사용합니다. IPv4 라우팅 테이블을 검색하려면 GetIpForwardTable 함수를 호출합니다.

Windows Vista 이상에서는 Administrators 그룹의 구성원으로 로그온한 사용자만 DeleteIpForwardEntry 함수를 호출할 수 있습니다. Administrators 그룹의 구성원이 아닌 사용자가 DeleteIpForwardEntry 를 호출하면 함수 호출이 실패하고 ERROR_ACCESS_DENIED 반환됩니다.

Windows Vista 이상에서 UAC(사용자 계정 제어)로 인해 DeleteIpForwardEntry 함수가 실패할 수도 있습니다. 이 함수를 포함하는 애플리케이션이 기본 제공 관리자가 아닌 Administrators 그룹의 구성원으로 로그온한 사용자에 의해 실행되는 경우 애플리케이션이 requestedExecutionLevel 이 requireAdministrator로 설정된 매니페스트 파일에 표시되지 않는 한 이 호출은 실패합니다. 애플리케이션에 이 매니페스트 파일이 없는 경우 기본 제공 관리자가 아닌 Administrators 그룹의 구성원으로 로그온한 사용자는 이 함수가 성공하려면 기본 제공 관리자(RunAs 관리자)로 향상된 셸에서 애플리케이션을 실행해야 합니다.

참고 Windows NT 4.0 및 Windows 2000 이상에서 이 함수는 권한 있는 작업을 실행합니다. 이 함수가 성공적으로 실행되려면 호출자가 Administrators 그룹 또는 NetworkConfigurationOperators 그룹의 구성원으로 로그온되어야 합니다.
 

예제

다음 코드 예제에서는 기본 게이트웨이를 NewGateway로 변경하는 방법을 보여 줍니다. GetIpForwardTable을 호출하고 게이트웨이를 변경한 다음 SetIpForwardEntry를 호출하면 경로가 변경되지 않지만 새 경로가 추가됩니다. 여러 기본 게이트웨이가 있는 경우 이 코드는 해당 게이트웨이를 삭제합니다. 새 게이트웨이는 실행 가능해야 합니다. 그렇지 않으면 TCP/IP는 변경 사항을 무시합니다.

참고 이 코드를 실행하면 IP 라우팅 테이블이 변경되고 네트워크 작업이 실패할 수 있습니다.
 
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#include <windows.h>
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>

#pragma comment(lib, "iphlpapi.lib")

int main()
{
    // Declare and initialize variables
    PMIB_IPFORWARDTABLE pIpForwardTable = NULL;
    PMIB_IPFORWARDROW pRow = NULL;
    DWORD dwSize = 0;
    BOOL bOrder = FALSE;
    DWORD dwStatus = 0;
    DWORD NewGateway = 0xDDBBCCAA;      // this is in host order Ip Address AA.BB.CC.DD is DDCCBBAA

    unsigned int i;

// Identify the required size of the buffer.
    dwStatus = GetIpForwardTable(pIpForwardTable, &dwSize, bOrder);
    if (dwStatus == ERROR_INSUFFICIENT_BUFFER) {
        // Allocate memory for the table.
        if (!(pIpForwardTable = (PMIB_IPFORWARDTABLE) malloc(dwSize))) {
            printf("Malloc failed. Out of memory.\n");
            exit(1);
        }
        // Retrieve the table.
        dwStatus = GetIpForwardTable(pIpForwardTable, &dwSize, bOrder);
    }

    if (dwStatus != ERROR_SUCCESS) {
        printf("getIpForwardTable failed.\n");
        if (pIpForwardTable)
            free(pIpForwardTable);
        exit(1);
    }
// Search for the required row in the table. The default gateway has a destination
// of 0.0.0.0. Be aware the table continues to be searched, but only
// one row is copied. This is to ensure that, if multiple gateways exist, all of them are deleted.
// 
    for (i = 0; i < pIpForwardTable->dwNumEntries; i++) {
        if (pIpForwardTable->table[i].dwForwardDest == 0) {
            // The default gateway was found.
            if (!pRow) {
                // Allocate memory to store the row. This is easier than manually filling
                // the row structure; only the gateway address is changed.
                //
                pRow = (PMIB_IPFORWARDROW) malloc(sizeof (MIB_IPFORWARDROW));
                if (!pRow) {
                    printf("Malloc failed. Out of memory.\n");
                    exit(1);
                }
                // Copy the row.
                memcpy(pRow, &(pIpForwardTable->table[i]),
                       sizeof (MIB_IPFORWARDROW));
            }
            // Delete the old default gateway entry.
            dwStatus = DeleteIpForwardEntry(&(pIpForwardTable->table[i]));

            if (dwStatus != ERROR_SUCCESS) {
                printf("Could not delete old gateway\n");
                exit(1);
            }
        }
    }

// Set the nexthop field to our new gateway. All other properties of the route will
// remain the same.
    pRow->dwForwardNextHop = NewGateway;

// Create a new route entry for the default gateway.
    dwStatus = CreateIpForwardEntry(pRow);

    if (dwStatus == NO_ERROR)
        printf("Gateway changed successfully\n");
    else if (dwStatus == ERROR_INVALID_PARAMETER)
        printf("Invalid parameter.\n");
    else
        printf("Error: %d\n", dwStatus);

// Free the memory. 
    if (pIpForwardTable)
        free(pIpForwardTable);
    if (pRow)
        free(pRow);

    exit(0);
}

요구 사항

   
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 iphlpapi.h
라이브러리 Iphlpapi.lib
DLL Iphlpapi.dll

참고 항목

CreateIpForwardEntry

FormatMessage

GetIpForwardTable

IP 도우미 함수 참조

IP 도우미 시작 페이지

MIB_IPFORWARDROW

SetIpForwardEntry