共用方式為


使用 GetNetworkParams 擷取資訊

GetNetworkParams函式會以目前網路設定的相關資料填入FIXED_INFO結構的指標。

使用 GetNetworkParams

  1. 宣告名為pFixedInfo之FIXED_INFO物件的指標,以及名為ulOutBufLenULONG物件。 這些變數會當做參數傳遞至 GetNetworkParams 函式。 另建立用於錯誤檢查) 的 DWORD 變數 dwRetVal (。

        FIXED_INFO *pFixedInfo;
        IP_ADDR_STRING *pIPAddr;
    
        ULONG ulOutBufLen;
        DWORD dwRetVal;
    
  2. 配置結構的記憶體。

    注意

    ulOutBufLen的大小不足以保存資訊。 請參閱後續步驟。

     

        pFixedInfo = (FIXED_INFO *) malloc(sizeof (FIXED_INFO));
        ulOutBufLen = sizeof (FIXED_INFO);
    
  3. 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");
            }
        }
    
  4. 使用一般錯誤檢查並將其值傳回至 DWORD變數dwRetVal,對GetNetworkParams進行第二次呼叫;用於更進階的錯誤檢查。

        if (dwRetVal = GetNetworkParams(pFixedInfo, &ulOutBufLen) != NO_ERROR) {
            printf("GetNetworkParams failed with error %d\n", dwRetVal);
            if (pFixedInfo) {
                free(pFixedInfo);
            }
        }        
    
  5. 如果呼叫成功,請從 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");
    
  6. 釋放配置給 pFixedInfo 結構的任何記憶體。

        if (pFixedInfo) {
            free(pFixedInfo);
            pFixedInfo = NULL;
        }
    

下一個步驟: 使用 GetAdaptersInfo 管理網路介面卡

上一個步驟: 建立基本 IP 協助程式應用程式