共用方式為


使用 GetAdaptersInfo 管理網路介面卡

GetAdaptersInfo函式會填入IP_ADAPTER_INFO結構的指標,其中包含與系統相關聯之網路介面卡的相關資訊。

使用 GetAdaptersInfo

  1. 宣告名為pAdapterInfoIP_ADAPTER_INFO變數的指標,以及名為ulOutBufLenULONG變數。 這些變數會當做參數傳遞至 GetAdaptersInfo 函 式。 此外,請建立名為dwRetValDWORD變數 (,以檢查) 錯誤。

    IP_ADAPTER_INFO  *pAdapterInfo;
    ULONG            ulOutBufLen;
    DWORD            dwRetVal;
    
    
  2. 為結構配置記憶體。

    pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
    ulOutBufLen = sizeof(IP_ADAPTER_INFO);
    
    
  3. GetAdaptersInfo 進行初始呼叫,以取得 ulOutBufLen 變數所需的大小。

    注意

    對函式的這個呼叫的目的是要失敗,並且用來確保 ulOutBufLen 變數指定足以保存傳回 給 pAdapterInfo之所有資訊的大小。 這是此類型之資料結構和函式的常見程式設計模型。

     

    if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) {
        free (pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO *) malloc ( ulOutBufLen );
    }
    
    
  4. GetAdaptersInfo進行第二次呼叫,將 pAdapterInfoulOutBufLen 當做參數傳遞,並執行一般錯誤檢查。 將其值傳回至 DWORD 變數 dwRetVal (,以取得更廣泛的錯誤檢查) 。

    if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) != ERROR_SUCCESS) {
        printf("GetAdaptersInfo call failed with %d\n", dwRetVal);
    }
    
    
    
  5. 如果呼叫成功,請存取 pAdapterInfo 結構中的部分資料。

    PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
    while (pAdapter) {
        printf("Adapter Name: %s\n", pAdapter->AdapterName);
        printf("Adapter Desc: %s\n", pAdapter->Description);
        printf("\tAdapter Addr: \t");
        for (UINT i = 0; i < pAdapter->AddressLength; i++) {
            if (i == (pAdapter->AddressLength - 1))
                printf("%.2X\n",(int)pAdapter->Address[i]);
            else
                printf("%.2X-",(int)pAdapter->Address[i]);
        }
        printf("IP Address: %s\n", pAdapter->IpAddressList.IpAddress.String);
        printf("IP Mask: %s\n", pAdapter->IpAddressList.IpMask.String);
        printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
        printf("\t***\n");
        if (pAdapter->DhcpEnabled) {
            printf("\tDHCP Enabled: Yes\n");
            printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String);
        }
        else
          printf("\tDHCP Enabled: No\n");
    
      pAdapter = pAdapter->Next;
    }
    
    
  6. 釋放配置給 pAdapterInfo 結構的任何記憶體。

    if (pAdapterInfo)
            free(pAdapterInfo);
    
    

下一個步驟: 使用 GetInterfaceInfo 管理介面

上一個步驟: 使用 GetNetworkParams 擷取資訊