Bagikan melalui


Mengelola Adaptor Jaringan Menggunakan GetAdaptersInfo

Fungsi GetAdaptersInfo mengisi penunjuk ke struktur IP_ADAPTER_INFO dengan informasi tentang adaptor jaringan yang terkait dengan sistem.

Untuk menggunakan GetAdaptersInfo

  1. Deklarasikan penunjuk ke variabel IP_ADAPTER_INFO yang disebut pAdapterInfo, dan variabel ULONG yang disebut ulOutBufLen. Variabel ini diteruskan sebagai parameter ke fungsi GetAdaptersInfo . Buat juga variabel DWORD yang disebut dwRetVal (untuk pemeriksaan kesalahan).

    IP_ADAPTER_INFO  *pAdapterInfo;
    ULONG            ulOutBufLen;
    DWORD            dwRetVal;
    
    
  2. Alokasikan memori untuk struktur.

    pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
    ulOutBufLen = sizeof(IP_ADAPTER_INFO);
    
    
  3. Lakukan panggilan awal ke GetAdaptersInfo untuk mendapatkan ukuran yang diperlukan ke dalam variabel ulOutBufLen .

    Catatan

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

     

    if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) {
        free (pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO *) malloc ( ulOutBufLen );
    }
    
    
  4. Lakukan panggilan kedua ke GetAdaptersInfo, melewati pAdapterInfo dan ulOutBufLen sebagai parameter dan melakukan pemeriksaan kesalahan umum. Mengembalikan nilainya ke variabel DWORDdwRetVal (untuk pemeriksaan kesalahan yang lebih luas).

    if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) != ERROR_SUCCESS) {
        printf("GetAdaptersInfo call failed with %d\n", dwRetVal);
    }
    
    
    
  5. Jika panggilan berhasil, akses beberapa data dalam struktur pAdapterInfo .

    PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
    while (pAdapter) {
        printf("Adapter Name: %s\n", pAdapter->AdapterName);
        printf("Adapter Desc: %s\n", pAdapter->Description);
        printf("\tAdapter Addr: \t");
        for (UINT i = 0; i < pAdapter->AddressLength; i++) {
            if (i == (pAdapter->AddressLength - 1))
                printf("%.2X\n",(int)pAdapter->Address[i]);
            else
                printf("%.2X-",(int)pAdapter->Address[i]);
        }
        printf("IP Address: %s\n", pAdapter->IpAddressList.IpAddress.String);
        printf("IP Mask: %s\n", pAdapter->IpAddressList.IpMask.String);
        printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
        printf("\t***\n");
        if (pAdapter->DhcpEnabled) {
            printf("\tDHCP Enabled: Yes\n");
            printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String);
        }
        else
          printf("\tDHCP Enabled: No\n");
    
      pAdapter = pAdapter->Next;
    }
    
    
  6. Bebaskan memori apa pun yang dialokasikan untuk struktur pAdapterInfo .

    if (pAdapterInfo)
            free(pAdapterInfo);
    
    

Langkah Berikutnya: Mengelola Antarmuka Menggunakan GetInterfaceInfo

Langkah Sebelumnya: Mengambil Informasi Menggunakan GetNetworkParams