GetInterfaceInfo를 사용하여 인터페이스 관리
GetInterfaceInfo 함수는 IP_INTERFACE_INFO 구조체에 대한 포인터를 시스템과 연결된 인터페이스에 대한 정보로 채웁니다.
GetInterfaceInfo를 사용하려면
라는 IP_INTERFACE_INFO 개체와 라는
pInfo
ulOutBufLen
ULONG 개체에 대한 포인터를 선언합니다. 또한 라는dwRetVal
DWORD 개체를 선언합니다(오류 검사에 사용됨).ULONG ulOutBufLen; DWORD dwRetVal; unsigned int i; IP_INTERFACE_INFO* pInterfaceInfo;
구조체에 대한 메모리를 할당합니다.
참고
의
ulOutBufLen
크기는 정보를 보유하기에 충분하지 않습니다. 다음 단계를 참조하세요.pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(sizeof (IP_INTERFACE_INFO)); ulOutBufLen = sizeof(IP_INTERFACE_INFO);
GetInterfaceInfo를 처음 호출하여 변수에
ulOutBufLen
필요한 크기를 가져옵니다.참고
함수에 대한 이 호출은 실패하기 위한 것이며 변수가
ulOutBufLen
에 반환된 모든 정보를 보유하기에 충분한 크기를 지정하도록 하는pInfo
데 사용됩니다. 이 형식의 데이터 구조 및 함수에 대한 IP 도우미의 일반적인 프로그래밍 모델입니다.if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) == ERROR_INSUFFICIENT_BUFFER) { free(pInterfaceInfo); pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen); }
일반적인 오류 검사를 사용하여 GetInterfaceInfo 를 두 번째로 호출하고 해당 값을 DWORD 변수
dwRetVal
로 반환합니다(고급 오류 검사를 위해).if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) { printf(" GetInterfaceInfo failed with error: %d\n", dwRetVal); }
호출에 성공하면 데이터 구조의
pInfo
데이터에 액세스합니다.printf(" GetInterfaceInfo succeeded.\n"); printf(" Num Adapters: %ld\n\n", pInterfaceInfo->NumAdapters); for (i = 0; i < (unsigned int) pInterfaceInfo->NumAdapters; i++) { printf(" Adapter Index[%d]: %ld\n", i, pInterfaceInfo->Adapter[i].Index); printf(" Adapter Name[%d]: %ws\n\n", i, pInterfaceInfo->Adapter[i].Name); } }
참고
첫 번째 줄의 %ws는 와이드 문자열을 표시합니다. 이는 IP_ADAPTER_INDEX_MAP 구조
Adapter
체의 Name 특성이 유니코드 문자열인 WCHAR이기 때문에 사용됩니다.pInfo 구조에 할당된 메모리를 해제합니다.
if (pInterfaceInfo) { free(pInterfaceInfo); pInterfaceInfo = NULL; }
다음 단계: GetIpAddrTable을 사용하여 IP 주소 관리
이전 단계: GetAdaptersInfo를 사용하여 네트워크 어댑터 관리