Функция GetNetworkParams (iphlpapi.h)
Функция GetNetworkParams извлекает сетевые параметры для локального компьютера.
Синтаксис
IPHLPAPI_DLL_LINKAGE DWORD GetNetworkParams(
[out] PFIXED_INFO pFixedInfo,
[in] PULONG pOutBufLen
);
Параметры
[out] pFixedInfo
Указатель на буфер, содержащий структуру FIXED_INFO , которая получает сетевые параметры для локального компьютера, если функция выполнена успешно. Этот буфер должен быть выделен вызывающим объектом перед вызовом функции GetNetworkParams .
[in] pOutBufLen
Указатель на переменную ULONG , указывающую размер структуры FIXED_INFO . Если этого размера недостаточно для хранения сведений, GetNetworkParams заполняет эту переменную требуемым размером и возвращает код ошибки ERROR_BUFFER_OVERFLOW.
Возвращаемое значение
Если функция завершается успешно, возвращаемое значение будет ERROR_SUCCESS.
Если функция завершается сбоем, возвращаемое значение представляет собой один из следующих кодов ошибок.
Код возврата | Описание |
---|---|
|
Буфер для получения сведений о параметрах сети слишком мал. Это значение возвращается, если параметр pOutBufLen слишком мал для хранения сведений о параметрах сети или параметр pFixedInfo был указателем NULL . При возврате этого кода ошибки параметр pOutBufLen указывает на требуемый размер буфера. |
|
В функцию передан недопустимый параметр. Эта ошибка возвращается, если параметр pOutBufLen является указателем NULL , вызывающий процесс не имеет доступа на чтение и запись к памяти, на которую указывает pOutBufLen, или вызывающий процесс не имеет доступа на запись в память, на которую указывает параметр pFixedInfo . |
|
Сведения о параметрах сети для локального компьютера отсутствуют. |
|
Функция GetNetworkParams не поддерживается операционной системой, работающей на локальном компьютере. |
|
Если функция завершается сбоем, используйте FormatMessage , чтобы получить строку сообщения для возвращаемой ошибки. |
Комментарии
Функция GetNetworkParams используется для получения параметров сети для локального компьютера. Параметры сети возвращаются в структуре FIXED_INFO . Память для структуры FIXED_INFO должна быть выделена приложением. Приложение несет ответственность за освобождение этой памяти, когда она больше не нужна.
В microsoft пакет средств разработки программного обеспечения для Windows (SDK) определена структура FIXED_INFO_WIN2KSP1. При компиляции приложения, если целевой платформой является Windows 2000 с пакетом обновления 1 (SP1) и более поздних версий (NTDDI_VERSION >= NTDDI_WIN2KSP1
, _WIN32_WINNT >= 0x0501
или WINVER >= 0x0501
), структура FIXED_INFO_WIN2KSP1 вводится в структуру FIXED_INFO . При компиляции приложения, если целевая платформа не является Windows 2000 с пакетом обновления 1 (SP1) и более поздних версий, структура FIXED_INFO не определена.
Функция GetNetworkParams и структура FIXED_INFO поддерживаются в Windows 98 и более поздних версий. Но для создания приложения для целевой платформы, предшествующей Windows 2000 с пакетом обновления 1 (SP1), необходимо использовать более раннюю версию пакета SDK для платформы.
Примеры
В следующем примере извлекаются параметры сети для локального компьютера и выводится информация из возвращенных данных.
//
// Link with IPHlpAPI.lib
//
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <windows.h>
#pragma comment(lib, "IPHLPAPI.lib")
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
/* Note: could also use malloc() and free() */
int __cdecl main()
{
FIXED_INFO *pFixedInfo;
ULONG ulOutBufLen;
DWORD dwRetVal;
IP_ADDR_STRING *pIPAddr;
pFixedInfo = (FIXED_INFO *) MALLOC(sizeof (FIXED_INFO));
if (pFixedInfo == NULL) {
printf("Error allocating memory needed to call GetNetworkParams\n");
return 1;
}
ulOutBufLen = sizeof (FIXED_INFO);
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
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");
return 1;
}
}
if (dwRetVal = GetNetworkParams(pFixedInfo, &ulOutBufLen) == NO_ERROR) {
printf("Host Name: %s\n", pFixedInfo->HostName);
printf("Domain Name: %s\n", pFixedInfo->DomainName);
printf("DNS Servers:\n");
printf("\t%s\n", pFixedInfo->DnsServerList.IpAddress.String);
pIPAddr = pFixedInfo->DnsServerList.Next;
while (pIPAddr) {
printf("\t%s\n", pIPAddr->IpAddress.String);
pIPAddr = pIPAddr->Next;
}
printf("Node Type: ");
switch (pFixedInfo->NodeType) {
case BROADCAST_NODETYPE:
printf("Broadcast node\n");
break;
case PEER_TO_PEER_NODETYPE:
printf("Peer to Peer node\n");
break;
case MIXED_NODETYPE:
printf("Mixed node\n");
break;
case HYBRID_NODETYPE:
printf("Hybrid node\n");
break;
default:
printf("Unknown node type %0lx\n", pFixedInfo->NodeType);
break;
}
printf("DHCP scope name: %s\n", pFixedInfo->ScopeId);
if (pFixedInfo->EnableRouting)
printf("Routing: enabled\n");
else
printf("Routing: disabled\n");
if (pFixedInfo->EnableProxy)
printf("ARP proxy: enabled\n");
else
printf("ARP Proxy: disabled\n");
if (pFixedInfo->EnableDns)
printf("DNS: enabled\n");
else
printf("DNS: disabled\n");
} else {
printf("GetNetworkParams failed with error: %d\n", dwRetVal);
return 1;
}
if (pFixedInfo)
FREE(pFixedInfo);
return 0;
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Профессиональная [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows 2000 Server [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | iphlpapi.h |
Библиотека | Iphlpapi.lib |
DLL | Iphlpapi.dll |