Bagikan melalui


Fungsi GetAdaptersInfo (iphlpapi.h)

Fungsi GetAdaptersInfo mengambil informasi adaptor untuk komputer lokal.

Pada Windows XP dan yang lebih baru: Gunakan fungsi GetAdaptersAddresses alih-alih GetAdaptersInfo.

Sintaks

IPHLPAPI_DLL_LINKAGE ULONG GetAdaptersInfo(
  [out]     PIP_ADAPTER_INFO AdapterInfo,
  [in, out] PULONG           SizePointer
);

Parameter

[out] AdapterInfo

Penunjuk ke buffer yang menerima daftar tertaut struktur IP_ADAPTER_INFO .

[in, out] SizePointer

Penunjuk ke variabel ULONG yang menentukan ukuran buffer yang diacu oleh parameter pAdapterInfo . Jika ukuran ini tidak cukup untuk menyimpan informasi adaptor, GetAdaptersInfo mengisi variabel ini dengan ukuran yang diperlukan, dan mengembalikan kode kesalahan ERROR_BUFFER_OVERFLOW.

Menampilkan nilai

Jika fungsi berhasil, nilai yang dikembalikan ERROR_SUCCESS (didefinisikan ke nilai yang sama dengan NO_ERROR).

Jika fungsi gagal, nilai yang dikembalikan adalah salah satu kode kesalahan berikut.

Menampilkan kode Deskripsi
ERROR_BUFFER_OVERFLOW
Buffer untuk menerima informasi adaptor terlalu kecil. Nilai ini dikembalikan jika ukuran buffer yang ditunjukkan oleh parameter pOutBufLen terlalu kecil untuk menyimpan informasi adaptor atau parameter pAdapterInfo adalah penunjuk NULL . Ketika kode kesalahan ini dikembalikan, parameter pOutBufLen menunjuk ke ukuran buffer yang diperlukan.
ERROR_INVALID_DATA
Informasi adaptor tidak valid diambil.
ERROR_INVALID_PARAMETER
Salah satu parameter tidak valid. Kesalahan ini dikembalikan jika parameter pOutBufLen adalah penunjuk NULL , atau proses panggilan tidak memiliki akses baca/tulis ke memori yang ditujukkan oleh pOutBufLen atau proses pemanggilan tidak memiliki akses tulis ke memori yang diacu oleh parameter pAdapterInfo .
ERROR_NO_DATA
Tidak ada informasi adapter untuk komputer lokal.
ERROR_NOT_SUPPORTED
Fungsi GetAdaptersInfo tidak didukung oleh sistem operasi yang berjalan di komputer lokal.
Lainnya
Jika fungsi gagal, gunakan FormatMessage untuk mendapatkan string pesan untuk kesalahan yang dikembalikan.

Keterangan

Fungsi GetAdaptersInfo hanya dapat mengambil informasi untuk alamat IPv4.

Dalam versi sebelum Windows 10, urutan munculnya adaptor dalam daftar yang dikembalikan oleh fungsi ini dapat dikontrol dari folder Koneksi Jaringan: pilih item menu Pengaturan Tingkat Lanjut dari menu Tingkat Lanjut. Dimulai dengan Windows 10, pesanan tidak ditentukan.

Fungsi GetAdaptersInfo dan GetInterfaceInfo tidak mengembalikan informasi tentang antarmuka loopback IPv4. Informasi tentang antarmuka loopback dikembalikan oleh fungsi GetIpAddrTable .

Pada Windows XP dan yang lebih baru: Daftar adaptor yang dikembalikan oleh GetAdaptersInfo mencakup adaptor searah. Untuk menghasilkan daftar adaptor yang dapat mengirim dan menerima data, panggil GetUniDirectionalAdapterInfo, dan kecualikan adaptor yang dikembalikan dari daftar yang dikembalikan oleh GetAdaptersInfo.

Contoh

Contoh ini mengambil informasi adaptor dan mencetak berbagai properti dari setiap adaptor.

#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "IPHLPAPI.lib")

#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))

/* Note: could also use malloc() and free() */

int __cdecl main()
{

    /* Declare and initialize variables */

// It is possible for an adapter to have multiple
// IPv4 addresses, gateways, and secondary WINS servers
// assigned to the adapter. 
//
// Note that this sample code only prints out the 
// first entry for the IP address/mask, and gateway, and
// the primary and secondary WINS server for each adapter. 

    PIP_ADAPTER_INFO pAdapterInfo;
    PIP_ADAPTER_INFO pAdapter = NULL;
    DWORD dwRetVal = 0;
    UINT i;

/* variables used to print DHCP time info */
    struct tm newtime;
    char buffer[32];
    errno_t error;

    ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
    pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(sizeof (IP_ADAPTER_INFO));
    if (pAdapterInfo == NULL) {
        printf("Error allocating memory needed to call GetAdaptersinfo\n");
        return 1;
    }
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
    if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
        FREE(pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
        if (pAdapterInfo == NULL) {
            printf("Error allocating memory needed to call GetAdaptersinfo\n");
            return 1;
        }
    }

    if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
        pAdapter = pAdapterInfo;
        while (pAdapter) {
            printf("\tComboIndex: \t%d\n", pAdapter->ComboIndex);
            printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
            printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
            printf("\tAdapter Addr: \t");
            for (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("\tIndex: \t%d\n", pAdapter->Index);
            printf("\tType: \t");
            switch (pAdapter->Type) {
            case MIB_IF_TYPE_OTHER:
                printf("Other\n");
                break;
            case MIB_IF_TYPE_ETHERNET:
                printf("Ethernet\n");
                break;
            case MIB_IF_TYPE_TOKENRING:
                printf("Token Ring\n");
                break;
            case MIB_IF_TYPE_FDDI:
                printf("FDDI\n");
                break;
            case MIB_IF_TYPE_PPP:
                printf("PPP\n");
                break;
            case MIB_IF_TYPE_LOOPBACK:
                printf("Loopback\n");
                break;
            case MIB_IF_TYPE_SLIP:
                printf("Slip\n");
                break;
            default:
                printf("Unknown type %ld\n", pAdapter->Type);
                break;
            }

            printf("\tIP Address: \t%s\n",
                   pAdapter->IpAddressList.IpAddress.String);
            printf("\tIP Mask: \t%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  DHCP Server: \t%s\n",
                       pAdapter->DhcpServer.IpAddress.String);

                printf("\t  Lease Obtained: ");
                /* Display local time */
                error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained);
                if (error)
                    printf("Invalid Argument to _localtime32_s\n");
                else {
                    // Convert to an ASCII representation 
                    error = asctime_s(buffer, 32, &newtime);
                    if (error)
                        printf("Invalid Argument to asctime_s\n");
                    else
                        /* asctime_s returns the string terminated by \n\0 */
                        printf("%s", buffer);
                }

                printf("\t  Lease Expires:  ");
                error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseExpires);
                if (error)
                    printf("Invalid Argument to _localtime32_s\n");
                else {
                    // Convert to an ASCII representation 
                    error = asctime_s(buffer, 32, &newtime);
                    if (error)
                        printf("Invalid Argument to asctime_s\n");
                    else
                        /* asctime_s returns the string terminated by \n\0 */
                        printf("%s", buffer);
                }
            } else
                printf("\tDHCP Enabled: No\n");

            if (pAdapter->HaveWins) {
                printf("\tHave Wins: Yes\n");
                printf("\t  Primary Wins Server:    %s\n",
                       pAdapter->PrimaryWinsServer.IpAddress.String);
                printf("\t  Secondary Wins Server:  %s\n",
                       pAdapter->SecondaryWinsServer.IpAddress.String);
            } else
                printf("\tHave Wins: No\n");
            pAdapter = pAdapter->Next;
            printf("\n");
        }
    } else {
        printf("GetAdaptersInfo failed with error: %d\n", dwRetVal);

    }
    if (pAdapterInfo)
        FREE(pAdapterInfo);

    return 0;
}

Persyaratan

   
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header iphlpapi.h
Pustaka Iphlpapi.lib
DLL Iphlpapi.dll

Lihat juga

GetAdaptersAddresses

GetInterfaceInfo

GetIpAddrTable

GetNumberOfInterfaces

GetUniDirectionalAdapterInfo

Referensi Fungsi Pembantu IP

Halaman Mulai Pembantu IP

IP_ADAPTER_INFO