使用 GetInterfaceInfo 管理介面
GetInterfaceInfo函式會填入IP_INTERFACE_INFO結構的指標,其中包含與系統相關聯之介面的相關資訊。
使用 GetInterfaceInfo
宣告名為
pInfo
IP_INTERFACE_INFO物件的指標,以及名為ulOutBufLen
的 ULONG物件。 同時宣告名為dwRetVal
(的DWORD物件,用於檢查錯誤) 。ULONG ulOutBufLen; DWORD dwRetVal; unsigned int i; IP_INTERFACE_INFO* pInterfaceInfo;
為結構配置記憶體。
注意
的大小
ulOutBufLen
不足以保存資訊。 請參閱後續步驟。pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(sizeof (IP_INTERFACE_INFO)); ulOutBufLen = sizeof(IP_INTERFACE_INFO);
對 GetInterfaceInfo 進行初始呼叫,以取得變數所需的
ulOutBufLen
大小。注意
對函式的這個呼叫是要失敗,而且是用來確保
ulOutBufLen
變數指定足以保存傳回給pInfo
之所有資訊的大小。 這是此類型資料結構和函式的 IP 協助程式中常見的程式設計模型。if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) == ERROR_INSUFFICIENT_BUFFER) { free(pInterfaceInfo); pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen); }
使用一般錯誤檢查對 GetInterfaceInfo 進行第二次呼叫,並將其值傳回 至 DWORD 變數
dwRetVal
(,以取得更進階的錯誤檢查) 。if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) { printf(" GetInterfaceInfo failed with error: %d\n", dwRetVal); }
如果呼叫成功,請從
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結構的
Adapter
Name屬性是WCHAR,也就是 Unicode 字串。釋放配置給 pInfo 結構的任何記憶體。
if (pInterfaceInfo) { free(pInterfaceInfo); pInterfaceInfo = NULL; }
下一個步驟: 使用 GetIpAddrTable 管理 IP 位址
上一個步驟: 使用 GetAdaptersInfo 管理網路介面卡