使用 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 帮助程序应用程序