GetInterfaceInfo 함수는 IP_INTERFACE_INFO 구조체에 대한 포인터를 시스템과 연결된 인터페이스에 대한 정보로 채웁니다.
GetInterfaceInfo 사용하려면
IP_INTERFACE_INFO 개체에 대한 포인터를
pInfo라는 이름으로 선언하고, ULONG 개체를ulOutBufLen이라는 이름으로 선언합니다. 또한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 와이드 문자열을 표시합니다.
AdapterIP_ADAPTER_INDEX_MAP 구조체의 Name 특성은 유니코드 문자열인 WCHAR이기 때문에 사용됩니다.pInfo 구조에 할당된 메모리를 해제합니다.
if (pInterfaceInfo) { free(pInterfaceInfo); pInterfaceInfo = NULL; }
다음 단계: GetIpAddrTable 사용하여 IP 주소 관리
이전 단계: GetAdaptersInfo 사용하여 네트워크 어댑터 관리