共用方式為


使用 GetInterfaceInfo 管理介面

GetInterfaceInfo函式會填入IP_INTERFACE_INFO結構的指標,其中包含與系統相關聯之介面的相關資訊。

使用 GetInterfaceInfo

  1. 宣告名為 pInfoIP_INTERFACE_INFO物件的指標,以及名為 ulOutBufLen的 ULONG物件。 同時宣告名為 dwRetVal (的DWORD物件,用於檢查錯誤) 。

        ULONG               ulOutBufLen;
        DWORD               dwRetVal;
        unsigned int       i;
    
        IP_INTERFACE_INFO*  pInterfaceInfo;
    
  2. 為結構配置記憶體。

    注意

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

     

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

    注意

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

     

        if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) ==
            ERROR_INSUFFICIENT_BUFFER) {
            free(pInterfaceInfo);
            pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen);
        }
    
  4. 使用一般錯誤檢查對 GetInterfaceInfo 進行第二次呼叫,並將其值傳回 至 DWORD 變數 dwRetVal (,以取得更進階的錯誤檢查) 。

        if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) {
            printf("  GetInterfaceInfo failed with error: %d\n", dwRetVal);
        }
    
  5. 如果呼叫成功,請從 pInfo 資料結構存取資料。

            printf("  GetInterfaceInfo succeeded.\n");
    
            printf("  Num Adapters: %ld\n\n", pInterfaceInfo->NumAdapters);
            for (i = 0; i < (unsigned int) pInterfaceInfo->NumAdapters; i++) {
                printf("  Adapter Index[%d]: %ld\n", i,
                       pInterfaceInfo->Adapter[i].Index);
                printf("  Adapter Name[%d]:  %ws\n\n", i,
                       pInterfaceInfo->Adapter[i].Name);
            }
        }
    

    注意

    第一行中的 %ws 代表寬字元串。 這是因為IP_ADAPTER_INDEX_MAP結構的 AdapterName屬性是WCHAR,也就是 Unicode 字串。

     

  6. 釋放配置給 pInfo 結構的任何記憶體。

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

下一個步驟: 使用 GetIpAddrTable 管理 IP 位址

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