次の方法で共有


GetInterfaceInfo を使用したインターフェイスの管理

GetInterfaceInfo 関数は、IP_INTERFACE_INFO構造体へのポインターに、システムに関連付けられているインターフェイスに関する情報を入力します。

GetInterfaceInfo を使用するには

  1. というIP_INTERFACE_INFO オブジェクトへのポインターと、 という pInfoULONG オブジェクトを宣言しますulOutBufLen。 また、 という dwRetValDWORD オブジェクトを宣言します (エラー チェックに使用されます)。

        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取得します。

    注意

    関数のこの呼び出しは失敗することを目的としており、変数が にpInfo返されるすべての情報をulOutBufLen保持するのに十分なサイズを指定するために使用されます。 これは、この型のデータ構造と関数の IP ヘルパーの一般的なプログラミング モデルです。

     

        if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) ==
            ERROR_INSUFFICIENT_BUFFER) {
            free(pInterfaceInfo);
            pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen);
        }
    
  4. 一般的なエラー チェックを使用して GetInterfaceInfo を 2 回目に呼び出し、その値を 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 を使用したネットワーク アダプターの管理