GetNetworkParams를 사용하여 정보 검색
GetNetworkParams 함수는 FIXED_INFO 구조체에 대한 포인터를 현재 네트워크 설정에 대한 데이터로 채웁니다.
GetNetworkParams를 사용하려면
pFixedInfo라는 FIXED_INFO 개체와 ulOutBufLen이라는 ULONG 개체에 대한 포인터를 선언합니다. 이러한 변수는 GetNetworkParams 함수에 매개 변수로 전달됩니다. 또한 DWORD 변수 dwRetVal 을 만듭니다(오류 검사에 사용됨).
FIXED_INFO *pFixedInfo; IP_ADDR_STRING *pIPAddr; ULONG ulOutBufLen; DWORD dwRetVal;
구조체에 대한 메모리를 할당합니다.
참고
ulOutBufLen의 크기는 정보를 보유하기에 충분하지 않습니다. 다음 단계를 참조하세요.
pFixedInfo = (FIXED_INFO *) malloc(sizeof (FIXED_INFO)); ulOutBufLen = sizeof (FIXED_INFO);
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"); } }
일반적인 오류 검사 및 DWORD 변수 dwRetVal로 반환을 사용하여 GetNetworkParams에 대한 두 번째 호출을 수행합니다. 고급 오류 검사에 사용됩니다.
if (dwRetVal = GetNetworkParams(pFixedInfo, &ulOutBufLen) != NO_ERROR) { printf("GetNetworkParams failed with error %d\n", dwRetVal); if (pFixedInfo) { free(pFixedInfo); } }
호출에 성공하면 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");
pFixedInfo 구조에 할당된 메모리를 해제합니다.
if (pFixedInfo) { free(pFixedInfo); pFixedInfo = NULL; }
다음 단계: GetAdaptersInfo를 사용하여 네트워크 어댑터 관리
이전 단계: 기본 IP 도우미 애플리케이션 만들기