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

如果函数失败,则返回值为以下错误代码之一。

返回代码 说明
ERROR_BUFFER_OVERFLOW
用于接收网络参数信息的缓冲区太小。 如果 pOutBufLen 参数太小而无法保存网络参数信息或 pFixedInfo 参数为 NULL 指针,则返回此值。 返回此错误代码时, pOutBufLen 参数指向所需的缓冲区大小。
ERROR_INVALID_PARAMETER
向该函数传递了无效参数。 如果 pOutBufLen 参数为 NULL 指针,调用进程对 pOutBufLen 指向的内存没有读/写访问权限,或者调用进程对 pFixedInfo 参数指向的内存没有写入访问权限,则返回此错误。
ERROR_NO_DATA
本地计算机不存在网络参数信息。
ERROR_NOT_SUPPORTED
在本地计算机上运行的操作系统不支持 GetNetworkParams 函数。
其他
如果函数失败,请使用 FormatMessage 获取返回错误的消息字符串。

注解

GetNetworkParams 函数用于检索本地计算机的网络参数。 网络参数以 FIXED_INFO 结构返回。 FIXED_INFO结构的内存必须由应用程序分配。 应用程序有责任在不再需要内存时释放此内存。

在 Microsoft Windows 软件开发工具包 (Windows SDK) (SDK) 中,定义了FIXED_INFO_WIN2KSP1结构。 如果目标平台是 Windows 2000 且 Service Pack 1 (SP1) 及更高版本 (NTDDI_VERSION >= NTDDI_WIN2KSP1_WIN32_WINNT >= 0x0501WINVER >= 0x0501) ,则编译应用程序时, FIXED_INFO_WIN2KSP1 结构的类型为 FIXED_INFO 结构。 如果目标平台不是 Windows 2000 SP1 及更高版本,则编译应用程序时, FIXED_INFO 结构未定义。

Windows 98 及更高版本支持 GetNetworkParams 函数和 FIXED_INFO 结构。 但是,若要为早于 Windows 2000 且 Service Pack 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
标头 iphlpapi.h
Library Iphlpapi.lib
DLL Iphlpapi.dll

另请参阅

FIXED_INFO

IP 帮助程序函数参考

IP 帮助程序起始页