GetInterfaceInfo を使用したインターフェイスの管理
GetInterfaceInfo 関数は、IP_INTERFACE_INFO構造体へのポインターに、システムに関連付けられているインターフェイスに関する情報を入力します。
GetInterfaceInfo を使用するには
というIP_INTERFACE_INFO オブジェクトへのポインターと、 という
pInfo
ULONG オブジェクトを宣言しますulOutBufLen
。 また、 という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
取得します。注意
関数のこの呼び出しは失敗することを目的としており、変数が に
pInfo
返されるすべての情報をulOutBufLen
保持するのに十分なサイズを指定するために使用されます。 これは、この型のデータ構造と関数の IP ヘルパーの一般的なプログラミング モデルです。if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) == ERROR_INSUFFICIENT_BUFFER) { free(pInterfaceInfo); pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen); }
一般的なエラー チェックを使用して GetInterfaceInfo を 2 回目に呼び出し、その値を 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 を使用したネットワーク アダプターの管理