GetAdaptersInfo를 사용하여 네트워크 어댑터 관리
GetAdaptersInfo 함수는 시스템과 연결된 네트워크 어댑터에 대한 정보로 IP_ADAPTER_INFO 구조체에 대한 포인터를 채웁니다.
GetAdaptersInfo를 사용하려면
pAdapterInfo라는 IP_ADAPTER_INFO 변수와 ulOutBufLen이라는 ULONG 변수에 대한 포인터를 선언합니다. 이러한 변수는 GetAdaptersInfo 함수에 매개 변수로 전달됩니다. 또한 dwRetVal이라는 DWORD 변수를 만듭니다(오류 검사용).
IP_ADAPTER_INFO *pAdapterInfo; ULONG ulOutBufLen; DWORD dwRetVal;
구조체에 대한 메모리를 할당합니다.
pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) ); ulOutBufLen = sizeof(IP_ADAPTER_INFO);
GetAdaptersInfo를 처음 호출하여 ulOutBufLen 변수에 필요한 크기를 가져옵니다.
참고
함수에 대한 이 호출은 실패를 의미하며 , ulOutBufLen 변수가 pAdapterInfo에 반환된 모든 정보를 보유하기에 충분한 크기를 지정하는 데 사용됩니다. 이 모델은 이 형식의 데이터 구조 및 함수에 대한 일반적인 프로그래밍 모델입니다.
if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) { free (pAdapterInfo); pAdapterInfo = (IP_ADAPTER_INFO *) malloc ( ulOutBufLen ); }
GetAdaptersInfo를 두 번째로 호출하여 pAdapterInfo 및 ulOutBufLen을 매개 변수로 전달하고 일반적인 오류 검사를 수행합니다. DWORD 변수 dwRetVal에 값을 반환합니다(보다 광범위한 오류 검사를 위해).
if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) != ERROR_SUCCESS) { printf("GetAdaptersInfo call failed with %d\n", dwRetVal); }
호출에 성공하면 pAdapterInfo 구조의 일부 데이터에 액세스합니다.
PIP_ADAPTER_INFO pAdapter = pAdapterInfo; while (pAdapter) { printf("Adapter Name: %s\n", pAdapter->AdapterName); printf("Adapter Desc: %s\n", pAdapter->Description); printf("\tAdapter Addr: \t"); for (UINT i = 0; i < pAdapter->AddressLength; i++) { if (i == (pAdapter->AddressLength - 1)) printf("%.2X\n",(int)pAdapter->Address[i]); else printf("%.2X-",(int)pAdapter->Address[i]); } printf("IP Address: %s\n", pAdapter->IpAddressList.IpAddress.String); printf("IP Mask: %s\n", pAdapter->IpAddressList.IpMask.String); printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String); printf("\t***\n"); if (pAdapter->DhcpEnabled) { printf("\tDHCP Enabled: Yes\n"); printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String); } else printf("\tDHCP Enabled: No\n"); pAdapter = pAdapter->Next; }
pAdapterInfo 구조에 할당된 모든 메모리를 해제합니다.
if (pAdapterInfo) free(pAdapterInfo);
다음 단계: GetInterfaceInfo를 사용하여 인터페이스 관리
이전 단계: GetNetworkParams를 사용하여 정보 검색