다음을 통해 공유


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

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

GetInterfaceInfo를 사용하려면

  1. 라는 IP_INTERFACE_INFO 개체와 라는 pInfoulOutBufLenULONG 개체에 대한 포인터를 선언합니다. 또한 라는 dwRetValDWORD 개체를 선언합니다(오류 검사에 사용됨).

        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는 와이드 문자열을 표시합니다. 이는 IP_ADAPTER_INDEX_MAP 구조 Adapter 체의 Name 특성이 유니코드 문자열인 WCHAR이기 때문에 사용됩니다.

     

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

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

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

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