Bagikan melalui


Mengelola Antarmuka Menggunakan GetInterfaceInfo

Fungsi GetInterfaceInfo mengisi pointer ke struktur IP_INTERFACE_INFO dengan informasi tentang antarmuka yang terkait dengan sistem.

Untuk menggunakan GetInterfaceInfo

  1. Deklarasikan penunjuk ke objek IP_INTERFACE_INFO yang disebut pInfo, dan objek ULONG yang disebut ulOutBufLen. Deklarasikan juga objek DWORD yang disebut dwRetVal (digunakan untuk pemeriksaan kesalahan).

        ULONG               ulOutBufLen;
        DWORD               dwRetVal;
        unsigned int       i;
    
        IP_INTERFACE_INFO*  pInterfaceInfo;
    
  2. Alokasikan memori untuk struktur.

    Catatan

    Ukuran ulOutBufLen tidak cukup untuk menyimpan informasi. Lihat langkah selanjutnya.

     

        pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(sizeof (IP_INTERFACE_INFO));
        ulOutBufLen = sizeof(IP_INTERFACE_INFO);
    
    
  3. Lakukan panggilan awal ke GetInterfaceInfo untuk mendapatkan ukuran yang diperlukan ke ulOutBufLen dalam variabel.

    Catatan

    Panggilan ke fungsi ini dimaksudkan untuk gagal, dan digunakan untuk memastikan bahwa ulOutBufLen variabel menentukan ukuran yang cukup untuk menyimpan semua informasi yang dikembalikan ke pInfo. Ini adalah model pemrograman umum di IP Helper untuk struktur data dan fungsi jenis ini.

     

        if (GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen) ==
            ERROR_INSUFFICIENT_BUFFER) {
            free(pInterfaceInfo);
            pInterfaceInfo = (IP_INTERFACE_INFO *) malloc(ulOutBufLen);
        }
    
  4. Lakukan panggilan kedua ke GetInterfaceInfo dengan pemeriksaan kesalahan umum dan kembalikan nilainya ke variabel dwRetValDWORD (untuk pemeriksaan kesalahan yang lebih canggih).

        if ((dwRetVal = GetInterfaceInfo(pInterfaceInfo, &ulOutBufLen)) != NO_ERROR) {
            printf("  GetInterfaceInfo failed with error: %d\n", dwRetVal);
        }
    
  5. Jika panggilan berhasil, akses data dari pInfo struktur data.

            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);
            }
        }
    

    Catatan

    %ws di baris pertama menunjukkan string lebar. Ini digunakan karena atribut Name dari struktur AdapterIP_ADAPTER_INDEX_MAP adalah WCHAR, yang merupakan string Unicode.

     

  6. Bebaskan memori apa pun yang dialokasikan untuk struktur pInfo .

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

Langkah Berikutnya: Mengelola Alamat IP Menggunakan GetIpAddrTable

Langkah Sebelumnya: Mengelola adaptor jaringan menggunakan GetAdaptersInfo