다음을 통해 공유


SetIpInterfaceEntry 함수(netioapi.h)

SetIpInterfaceEntry 함수는 로컬 컴퓨터에서 IP 인터페이스의 속성을 설정합니다.

구문

IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API SetIpInterfaceEntry(
  [in, out] PMIB_IPINTERFACE_ROW Row
);

매개 변수

[in, out] Row

인터페이스에 대한 MIB_IPINTERFACE_ROW 구조체 항목에 대한 포인터입니다. 입력 시 MIB_IPINTERFACE_ROWFamily 멤버를 AF_INET6 또는 AF_INET 설정해야 하며 InterfaceLuid 또는 MIB_IPINTERFACE_ROWInterfaceIndex 멤버를 지정해야 합니다. 반환이 성공하면 MIB_IPINTERFACE_ROW 항목의 InterfaceIndex 멤버가 지정된 경우 MIB_IPINTERFACE_ROWInterfaceLuid 멤버가 채워집니다.

반환 값

함수가 성공하면 반환 값이 NO_ERROR.

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

반환 코드 설명
ERROR_ACCESS_DENIED
액세스가 거부되었습니다. 이 오류는 다음을 포함하는 여러 조건에서 반환됩니다. 사용자가 로컬 컴퓨터에 필요한 관리 권한이 없거나 애플리케이션이 기본 제공 관리자(RunAs 관리자)로 향상된 셸에서 실행되고 있지 않습니다.
ERROR_FILE_NOT_FOUND
시스템은 지정된 파일을 찾을 수 없습니다. Row 매개 변수가 가리키는 MIB_IPINTERFACE_ROWInterfaceLuid 또는 InterfaceIndex 멤버가 지정한 네트워크 인터페이스 LUID 또는 인터페이스 인덱스가 로컬 컴퓨터의 값이 아닌 경우 이 오류가 반환됩니다.
ERROR_INVALID_PARAMETER
잘못된 매개 변수가 함수에 전달되었습니다. 이 오류는 Row 매개 변수에 NULL 포인터가 전달되거나 Row 매개 변수가 가리키는 MIB_IPINTERFACE_ROWFamily 멤버가 AF_INET 또는 AF_INET6 지정되지 않았거나 Row 매개 변수가 가리키는 MIB_IPINTERFACE_ROWInterfaceLuid 또는 InterfaceIndex 멤버가 모두 지정되지 않은 경우 반환됩니다.
ERROR_NOT_FOUND
지정된 인터페이스를 찾을 수 없습니다. Row 매개 변수가 가리키는 MIB_IPINTERFACE_ROWInterfaceLuid 또는 InterfaceIndex 멤버가 지정한 네트워크 인터페이스가 MIB_IPINTERFACE_ROW 구조의 Family 멤버에 지정된 IP 주소 패밀리와 일치하지 않으면 이 오류가 반환됩니다.
기타
FormatMessage를 사용하여 반환된 오류에 대한 메시지 문자열을 가져옵니다.

설명

SetIpInterfaceEntry 함수는 Windows Vista 이상에서 정의됩니다.

SetIpInterfaceEntry 함수를 사용하여 기존 IP 인터페이스 항목을 수정할 수 있습니다.

입력 시 Row 매개 변수가 가리키는 MIB_IPINTERFACE_ROW 구조의 Family 멤버를 AF_INET 또는 AF_INET6 초기화해야 합니다. 입력 외에도 Row 매개 변수를 가리키는 MIB_IPINTERFACE_ROW 구조체의 다음 멤버 중 하나 이상을 초기화해야 합니다. InterfaceLuid 또는 InterfaceIndex.

필드는 위에 나열된 순서대로 사용됩니다. 따라서 InterfaceLuid 가 지정된 경우 이 멤버를 사용하여 인터페이스를 확인합니다. InterfaceLuid 멤버에 대해 값이 설정되지 않은 경우(이 멤버의 값이 0으로 설정됨) InterfaceIndex 멤버를 사용하여 인터페이스를 확인합니다.

출력에서 InterfaceIndex가 지정된 경우 Row 매개 변수가 가리키는 MIB_IPINTERFACE_ROW 구조체의 InterfaceLuid 멤버가 채워집니다.

SetIpInterfaceEntry 함수가 호출되면 Row가 가리키는 MIB_IPINTERFACE_ROW 구조의 MaxReassemblySize, MinRouterAdvertisementInterval, MaxRouterAdvertisementInterval , Connected, SupportsWakeUpPatterns, SupportsNeighborDiscovery, SupportsRouterDiscovery, ReachableTime, TransmitOffloadReceiveOffload 멤버가 무시됩니다. 이러한 멤버는 네트워크 스택에 의해 설정되며 SetIpInterfaceEntry 함수를 사용하여 변경할 수 없습니다.

애플리케이션은 일반적으로 GetIpInterfaceTable 함수를 호출하여 로컬 컴퓨터에서 IP 인터페이스 항목을 검색하거나 GetIpInterfaceEntry 함수를 호출하여 수정할 IP 인터페이스 항목만 검색합니다. 그런 다음 특정 IP 인터페이스 항목에 대한 MIB_IPINTERFACE_ROW 구조를 수정하고 이 구조체에 대한 포인터를 Row 매개 변수의 SetIpInterfaceEntry 함수에 전달할 수 있습니다. 그러나 IPv4의 경우 애플리케이션이 MIB_IPINTERFACE_ROW 구조체의 SitePrefixLength 멤버를 수정하려고 하면 안됩니다. IPv4의 경우 SitePrefixLength 멤버를 0으로 설정해야 합니다.

기존 IP 인터페이스 항목을 수정할 수 있는 또 다른 방법은 InitializeIpInterfaceEntry 함수를 사용하여 기본값으로 MIB_IPINTERFACE_ROW 구조체 항목의 필드를 초기화하는 것입니다. 그런 다음, 변경하려는 IP 인터페이스와 일치하도록 Row 매개 변수가 가리키는 MIB_IPINTERFACE_ROW 구조에서 Family 멤버와 InterfaceIndex 또는 InterfaceLuid 멤버를 설정합니다. 그런 다음 애플리케이션은 수정하려는 MIB_IPINTERFACE_ROW 항목의 필드를 변경한 다음 SetIpInterfaceEntry 함수를 호출할 수 있습니다. 그러나 IPv4의 경우 애플리케이션이 MIB_IPINTERFACE_ROW 구조체의 SitePrefixLength 멤버를 수정하려고 하면 안됩니다. IPv4의 경우 SitePrefixLength 멤버를 0으로 설정해야 합니다. 변경되는 모든 필드를 확인하는 유일한 방법은 MIB_IPINTERFACE_ROW 기본값으로 초기화될 때 특정 IP 인터페이스 항목의 MIB_IPINTERFACE_ROW 필드를 InitializeIpInterfaceEntry 함수에서 설정한 필드와 비교하는 것 뿐이므로 이 방법에 주의해야 합니다.

서로 다른 보안 요구 사항의 여러 네트워크에 대한 권한 없는 동시 액세스는 보안 허점을 만들고 권한 없는 애플리케이션이 실수로 두 네트워크 간에 데이터를 릴레이할 수 있도록 합니다. 일반적인 예는 VPN(가상 사설망) 및 인터넷에 대한 동시 액세스입니다. Windows Server 2003 및 Windows XP는 약한 호스트 모델을 사용합니다. 여기서 RAS는 다른 인터페이스를 통해 모든 기본 경로의 경로 메트릭을 늘려 이러한 동시 액세스를 방지합니다. 따라서 모든 트래픽이 VPN 인터페이스를 통해 라우팅되어 다른 네트워크 연결이 중단됩니다.

Windows Vista 이상에서는 기본적으로 강력한 호스트 모델이 사용됩니다. GetBestRoute2 또는 GetBestRoute를 사용하여 경로 조회에 원본 IP 주소를 지정하면 경로 조회가 원본 IP 주소의 인터페이스로 제한됩니다. RAS의 경로 메트릭 수정은 잠재적 경로 목록에 VPN 인터페이스에 대한 경로조차 없으므로 인터넷에 대한 트래픽을 허용하기 때문에 효과가 없습니다. MIB_IPINTERFACE_ROWDisableDefaultRoutes 멤버를 사용하여 인터페이스의 기본 경로를 사용하지 않도록 설정할 수 있습니다. 이 멤버는 VPN 클라이언트에서 분할 터널링이 필요하지 않은 경우 분할 터널링을 제한하기 위해 VPN 클라이언트에서 보안 조치로 사용할 수 있습니다. VPN 클라이언트는 SetIpInterfaceEntry 함수를 호출하여 필요한 경우 DisableDefaultRoutes 멤버를 TRUE 로 설정할 수 있습니다. VPN 클라이언트는 GetIpInterfaceEntry 함수를 호출하여 DisableDefaultRoutes 멤버의 현재 상태를 쿼리할 수 있습니다.

The

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

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 netioapi.h(Iphlpapi.h 포함)
라이브러리 Iphlpapi.lib
DLL Iphlpapi.dll

추가 정보

GetBestRoute

GetBestRoute2

GetIfEntry2

GetIfTable2

GetIfTable2Ex

GetIpInterfaceEntry

GetIpInterfaceTable

IP 도우미 함수 참조

InitializeIpInterfaceEntry

MIB_IF_ROW2

MIB_IF_TABLE2

MIB_IPINTERFACE_ROW

MIB_IPINTERFACE_TABLE

NotifyIpInterfaceChange