Bagikan melalui


Fungsi NotifyRouteChange (iphlpapi.h)

Fungsi NotifyRouteChange menyebabkan pemberitahuan dikirim ke pemanggil setiap kali perubahan terjadi dalam tabel perutean IPv4.

Sintaks

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

Parameter

[out] Handle

Penunjuk ke variabel HANDLE yang menerima handel untuk digunakan dalam pemberitahuan asinkron.

[in] overlapped

Penunjuk ke struktur TUMPANG TINDIH yang memberi tahu pemanggil tentang setiap perubahan dalam tabel perutean.

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 NotifyRouteChange dapat dipanggil dengan dua cara:

  • Metode sinkron
  • Metode asinkron

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

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

Jika pemanggil menentukan variabel handel dan struktur TUMPANG TINDIH , pemanggil dapat menggunakan handel yang dikembalikan dengan struktur TUMPANG TINDIH untuk menerima pemberitahuan asinkron tentang perubahan tabel perutean IPv4. Lihat topik berikut untuk informasi tentang menggunakan struktur handel dan TUMPANG TINDIH untuk menerima pemberitahuan:

Jika aplikasi menerima pemberitahuan dan memerlukan pemberitahuan untuk perubahan berikutnya, maka fungsi NotifyRouteChange harus dipanggil lagi.

Fungsi CancelIPChangeNotify membatalkan pemberitahuan alamat IP 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 GetIpForwardTable atau GetIpForwardTable2 untuk mengambil tabel perutean IPv4 untuk menentukan apa yang telah berubah. Jika aplikasi diberi tahu dan memerlukan pemberitahuan untuk perubahan berikutnya, maka fungsi NotifyRouteChange harus dipanggil lagi.

Jika fungsi NotifyRouteChange dipanggil secara asinkron, pemberitahuan akan dikirim pada perubahan rute IPv4 berikutnya hingga aplikasi membatalkan pemberitahuan dengan memanggil fungsi CancelIPChangeNotify atau aplikasi berakhir. 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 NotifyRouteChange2 dapat digunakan untuk mendaftar untuk diberi tahu tentang perubahan pada tabel perutean IPv6 di komputer lokal.

Contoh

Contoh berikut menunggu perubahan terjadi dalam tabel perutean IP.

#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 = NotifyRouteChange(&hand, &overlap);

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

  if ( WaitForSingleObject(overlap.hEvent, INFINITE) == WAIT_OBJECT_0 )
    printf("Routing 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

GetIpForwardTable

GetIpForwardTable2

GetOverlappedResult

Referensi Fungsi Pembantu IP

NotifyAddrChange

TUMPANG TINDIH