다음을 통해 공유


GetNetworkParams를 사용하여 정보 검색

GetNetworkParams 함수는 FIXED_INFO 구조체에 대한 포인터를 현재 네트워크 설정에 대한 데이터로 채웁니다.

GetNetworkParams를 사용하려면

  1. pFixedInfo라는 FIXED_INFO 개체와 ulOutBufLen이라는 ULONG 개체에 대한 포인터를 선언합니다. 이러한 변수는 GetNetworkParams 함수에 매개 변수로 전달됩니다. 또한 DWORD 변수 dwRetVal 을 만듭니다(오류 검사에 사용됨).

        FIXED_INFO *pFixedInfo;
        IP_ADDR_STRING *pIPAddr;
    
        ULONG ulOutBufLen;
        DWORD dwRetVal;
    
  2. 구조체에 대한 메모리를 할당합니다.

    참고

    ulOutBufLen의 크기는 정보를 보유하기에 충분하지 않습니다. 다음 단계를 참조하세요.

     

        pFixedInfo = (FIXED_INFO *) malloc(sizeof (FIXED_INFO));
        ulOutBufLen = sizeof (FIXED_INFO);
    
  3. GetNetworkParams를 처음 호출하여 ulOutBufLen 변수에 필요한 크기를 가져옵니다.

    참고

    이 함수 함수는 실패하고 ulOutBufLen 변수가 pFixedInfo에 반환된 모든 데이터를 보유하기에 충분한 크기를 지정하도록 하는 데 사용됩니다. 이 형식의 데이터 구조 및 함수에 대한 일반적인 프로그래밍 모델입니다.

     

        if (GetNetworkParams(pFixedInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
            free(pFixedInfo);
            pFixedInfo = (FIXED_INFO *) malloc(ulOutBufLen);
            if (pFixedInfo == NULL) {
                printf("Error allocating memory needed to call GetNetworkParams\n");
            }
        }
    
  4. 일반적인 오류 검사 및 DWORD 변수 dwRetVal로 반환을 사용하여 GetNetworkParams에 대한 두 번째 호출을 수행합니다. 고급 오류 검사에 사용됩니다.

        if (dwRetVal = GetNetworkParams(pFixedInfo, &ulOutBufLen) != NO_ERROR) {
            printf("GetNetworkParams failed with error %d\n", dwRetVal);
            if (pFixedInfo) {
                free(pFixedInfo);
            }
        }        
    
  5. 호출에 성공하면 pFixedInfo 데이터 구조의 데이터에 액세스합니다.

            printf("\tHost Name: %s\n", pFixedInfo->HostName);
            printf("\tDomain Name: %s\n", pFixedInfo->DomainName);
            printf("\tDNS Servers:\n");
            printf("\t\t%s\n", pFixedInfo->DnsServerList.IpAddress.String);
    
            pIPAddr = pFixedInfo->DnsServerList.Next;
            while (pIPAddr) {
                printf("\t\t%s\n", pIPAddr->IpAddress.String);
                pIPAddr = pIPAddr->Next;
            }
    
            printf("\tNode Type: ");
            switch (pFixedInfo->NodeType) {
            case 1:
                printf("%s\n", "Broadcast");
                break;
            case 2:
                printf("%s\n", "Peer to peer");
                break;
            case 4:
                printf("%s\n", "Mixed");
                break;
            case 8:
                printf("%s\n", "Hybrid");
                break;
            default:
                printf("\n");
            }
    
            printf("\tNetBIOS Scope ID: %s\n", pFixedInfo->ScopeId);
    
            if (pFixedInfo->EnableRouting)
                printf("\tIP Routing Enabled: Yes\n");
            else
                printf("\tIP Routing Enabled: No\n");
    
            if (pFixedInfo->EnableProxy)
                printf("\tWINS Proxy Enabled: Yes\n");
            else
                printf("\tWINS Proxy Enabled: No\n");
    
            if (pFixedInfo->EnableDns)
                printf("\tNetBIOS Resolution Uses DNS: Yes\n");
            else
                printf("\tNetBIOS Resolution Uses DNS: No\n");
    
  6. pFixedInfo 구조에 할당된 메모리를 해제합니다.

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

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

이전 단계: 기본 IP 도우미 애플리케이션 만들기