다음을 통해 공유


GetInterfaceInfo를 사용하여 인터페이스 관리

GetInterfaceInfo 함수는 IP_INTERFACE_INFO 구조체에 대한 포인터를 시스템과 연결된 인터페이스에 대한 정보로 채웁니다.

GetInterfaceInfo 사용하려면

  1. IP_INTERFACE_INFO 개체에 대한 포인터를 pInfo라는 이름으로 선언하고, ULONG 개체를 ulOutBufLen이라는 이름으로 선언합니다. 또한 dwRetVal(오류 검사에 사용됨)라는 DWORD 개체를 선언합니다.

        ULONG               ulOutBufLen;
        DWORD               dwRetVal;
        unsigned int       i;
    
        IP_INTERFACE_INFO*  pInterfaceInfo;
    
  2. 구조체에 대한 메모리를 할당합니다.

    메모

    ulOutBufLen 크기만으로는 정보를 보관할 수 없습니다. 다음 단계를 참조하세요.

     

        pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(sizeof (IP_INTERFACE_INFO));
        ulOutBufLen = sizeof(IP_INTERFACE_INFO);
    
    
  3. GetInterfaceInfo초기 호출을 실행하여 ulOutBufLen 변수에 필요한 크기를 가져옵니다.

    메모

    함수에 대한 이 호출은 실패하기 위한 것이며 ulOutBufLen 변수가 pInfo반환된 모든 정보를 보관하기에 충분한 크기를 지정하는 데 사용됩니다. 이 형식의 데이터 구조 및 함수에 대한 IP 도우미의 일반적인 프로그래밍 모델입니다.

     

        if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) ==
            ERROR_INSUFFICIENT_BUFFER) {
            free(pInterfaceInfo);
            pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen);
        }
    
  4. 일반적인 오류 검사를 사용하여 GetInterfaceInfo두 번째 호출을 수행하고 해당 값을 DWORD 변수 dwRetVal 반환합니다(고급 오류 검사를 위해).

        if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) {
            printf("  GetInterfaceInfo failed with error: %d\n", dwRetVal);
        }
    
  5. 호출에 성공하면 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 와이드 문자열을 표시합니다. Adapter IP_ADAPTER_INDEX_MAP 구조체의 Name 특성은 유니코드 문자열인 WCHAR이기 때문에 사용됩니다.

     

  6. pInfo 구조에 할당된 메모리를 해제합니다.

        if (pInterfaceInfo) {
            free(pInterfaceInfo);
            pInterfaceInfo = NULL;
        }
    

다음 단계: GetIpAddrTable 사용하여 IP 주소 관리

이전 단계: GetAdaptersInfo 사용하여 네트워크 어댑터 관리