Bagikan melalui


Fungsi NotifyAddrChange (iphlpapi.h)

Fungsi NotifyAddrChange menyebabkan pemberitahuan dikirim ke pemanggil setiap kali perubahan terjadi dalam tabel yang memetakan alamat IPv4 ke antarmuka.

Sintaks

IPHLPAPI_DLL_LINKAGE DWORD NotifyAddrChange(
  [out] PHANDLE      Handle,
  [in]  LPOVERLAPPED overlapped
);

Parameter

[out] Handle

Penunjuk ke variabel HANDLE yang menerima handel file untuk digunakan dalam panggilan berikutnya ke fungsi GetOverlappedResult .

Peringatan Jangan tutup handel ini, dan jangan kaitkan dengan port penyelesaian.
 

[in] overlapped

Penunjuk ke struktur TUMPANG TINDIH yang memberi tahu pemanggil tentang setiap perubahan dalam tabel yang memetakan alamat IP ke antarmuka.

Nilai kembali

Jika fungsi berhasil, nilai yang dikembalikan NO_ERROR jika pemanggil menentukan NULL untuk parameter Handel dan tumpang tindih . Jika pemanggil menentukan parameter non-NULL , nilai pengembalian untuk keberhasilan adalah ERROR_IO_PENDING.

Jika fungsi gagal, gunakan FormatMessage untuk mendapatkan string pesan untuk kesalahan yang dikembalikan.

Menampilkan kode Deskripsi
ERROR_CANCELLED
Konteks dibatalkan pendaftarannya, sehingga panggilan segera dibatalkan.
ERROR_INVALID_PARAMETER
Parameter yang tidak valid telah diteruskan. Kesalahan ini dikembalikan jika parameter Handel dan tumpang tindih bukan NULL, tetapi memori yang ditentukan oleh parameter input tidak dapat ditulis oleh proses panggilan. Kesalahan ini juga dikembalikan jika klien sudah membuat permintaan pemberitahuan perubahan, sehingga permintaan duplikat ini akan gagal.
ERROR_NOT_ENOUGH_MEMORY
Tidak tersedia cukup memori untuk menyelesaikan operasi.
ERROR_NOT_SUPPORTED
Kesalahan ini dikembalikan pada versi Windows di mana fungsi ini tidak didukung seperti Windows 98/95 dan Windows NT 4.0.

Keterangan

The
Fungsi NotifyAddrChange dapat dipanggil dengan dua cara:

  • Metode sinkron
  • Metode asinkron

Jika pemanggil menentukan NULL untuk parameter Handel dan tumpang tindih , panggilan ke NotifyAddrChange sinkron dan akan memblokir hingga perubahan alamat IP terjadi. Dalam hal ini jika perubahan terjadi, fungsi NotifyAddrChange selesai untuk menunjukkan bahwa perubahan telah terjadi.

Jika fungsi NotifyAddrChange dipanggil secara sinkron, pemberitahuan akan dikirim pada perubahan alamat IPv4 berikutnya hingga aplikasi berakhir.

Jika pemanggil menentukan variabel handel dan struktur TUMPANG TINDIH , maka panggilan fungsi NotifyAddrChange tidak sinkron dan pemanggil dapat menggunakan handel yang dikembalikan dengan struktur TUMPANG TINDIH untuk menerima pemberitahuan asinkron perubahan alamat IPv4 menggunakan fungsi GetOverlappedResult . Lihat topik berikut untuk informasi tentang menggunakan struktur handel dan TUMPANG TINDIH untuk menerima pemberitahuan:

Fungsi CancelIPChangeNotify membatalkan pemberitahuan alamat IPv4 dan perubahan rute yang sebelumnya diminta dengan panggilan yang berhasil ke fungsi NotifyAddrChange atau NotifyRouteChange .

Setelah aplikasi diberi tahu tentang perubahan, aplikasi kemudian dapat memanggil fungsi GetIpAddrTable atau GetAdaptersAddresses untuk mengambil tabel alamat IPv4 untuk menentukan apa yang telah berubah. Jika aplikasi diberi tahu dan memerlukan pemberitahuan untuk perubahan berikutnya, maka fungsi NotifyAddrChange harus dipanggil lagi.

Jika fungsi NotifyAddrChange dipanggil secara asinkron, pemberitahuan akan dikirim pada perubahan alamat IPv4 berikutnya hingga aplikasi membatalkan pemberitahuan dengan memanggil fungsi CancelIPChangeNotify atau aplikasi dihentikan. Jika aplikasi berakhir, sistem akan secara otomatis membatalkan pendaftaran untuk pemberitahuan. Masih disarankan agar aplikasi secara eksplisit membatalkan pemberitahuan apa pun sebelum berakhir.

Pendaftaran apa pun untuk pemberitahuan tidak bertahan di seluruh sistem yang dimatikan atau di-boot ulang.

Pada Windows Vista dan yang lebih baru, fungsi NotifyIpInterfaceChange dapat digunakan untuk mendaftar untuk diberi tahu tentang perubahan antarmuka IPv4 dan IPv6 di komputer lokal.

Contoh

Contoh berikut menunggu perubahan terjadi dalam tabel yang memetakan alamat IP ke antarmuka.

#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <windows.h>

#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")

void main()
{
  OVERLAPPED overlap;
  DWORD ret;
    
  HANDLE hand = NULL;
  overlap.hEvent = WSACreateEvent();

  ret = NotifyAddrChange(&hand, &overlap);

  if (ret != NO_ERROR)
  {
    if (WSAGetLastError() != WSA_IO_PENDING)
    {
      printf("NotifyAddrChange error...%d\n", WSAGetLastError());            
      return;
    }
  }

  if ( WaitForSingleObject(overlap.hEvent, INFINITE) == WAIT_OBJECT_0 )
    printf("IP Address table changed..\n");
}

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

CancelIPChangeNotify

GetAdaptersAddresses

GetIpAddrTable

GetOverlappedResult

Referensi Fungsi Pembantu IP

NotifyIpInterfaceChange

NotifyRouteChange

TUMPANG TINDIH