Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция GetNetworkParams заполняет указатель на структуру FIXED_INFO с данными о текущих параметрах сети.
Чтобы использовать getNetworkParams
Объявите указатель на объект FIXED_INFO с именем pFixedInfo, а объект ULONG с именем ulOutBufLen. Эти переменные передаются в качестве параметров функции GetNetworkParams. Кроме того, создайте переменную DWORDdwRet Val (используется для проверки ошибок).
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"); } }
Выполните второй вызов GetNetworkParams с помощью общей проверки на ошибки и возвращения значения в переменную DWORD DWORD dwRetVal; которая используется для более продвинутой проверки ошибок.
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-приложения