Funzione NotifyAddrChange (iphlpapi.h)

La funzione NotifyAddrChange causa l'invio di una notifica al chiamante ogni volta che si verifica una modifica nella tabella che esegue il mapping degli indirizzi IPv4 alle interfacce.

Sintassi

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

Parametri

[out] Handle

Puntatore a una variabile HANDLE che riceve un handle di file da usare in una chiamata successiva alla funzione GetOverlappedResult .

Avviso Non chiudere questo handle e non associarlo a una porta di completamento.
 

[in] overlapped

Puntatore a una struttura OVERLAPPED che informa il chiamante di eventuali modifiche nella tabella che esegue il mapping degli indirizzi IP alle interfacce.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è NO_ERROR se il chiamante specifica NULL per i parametri Handle e sovrapposti . Se il chiamante specifica parametri non NULL , il valore restituito per esito positivo è ERROR_IO_PENDING.

Se la funzione ha esito negativo, usare FormatMessage per ottenere la stringa di messaggio per l'errore restituito.

Codice restituito Descrizione
ERROR_CANCELLED
Il contesto viene deregisterato, quindi la chiamata è stata annullata immediatamente.
ERROR_INVALID_PARAMETER
È stato passato un parametro non valido. Questo errore viene restituito se i parametri handle e sovrapposti non sono NULL, ma la memoria specificata dai parametri di input non può essere scritta dal processo chiamante. Questo errore viene restituito anche se il client ha già effettuato una richiesta di notifica di modifica, quindi questa richiesta duplicata avrà esito negativo.
ERROR_NOT_ENOUGH_MEMORY
Memoria insufficiente per completare l'operazione.
ERROR_NOT_SUPPORTED
Questo errore viene restituito nelle versioni di Windows in cui questa funzione non è supportata, ad esempio Windows 98/95 e Windows NT 4.0.

Commenti

The
La funzione NotifyAddrChange può essere chiamata in due modi:

  • Metodo sincrono
  • Metodo asincrono

Se il chiamante specifica NULL per i parametri Handle e sovrapposti , la chiamata a NotifyAddrChange è sincrona e bloccherà finché non si verifica una modifica dell'indirizzo IP. In questo caso, se si verifica una modifica, la funzione NotifyAddrChange viene completata per indicare che si è verificata una modifica.

Se la funzione NotifyAddrChange viene chiamata in modo sincrono, verrà inviata una notifica al successivo indirizzo IPv4 fino al termine dell'applicazione.

Se il chiamante specifica una variabile handle e una struttura OVERLAPPED , la chiamata alla funzione NotifyAddrChange è asincrona e il chiamante può usare l'handle restituito con la struttura OVERLAPPED per ricevere una notifica asincrona delle modifiche dell'indirizzo IPv4 usando la funzione GetOverlappedResult . Per informazioni sull'uso della struttura handle e OVERLAPPED per ricevere notifiche, vedere gli argomenti seguenti:

La funzione CancelIPChangeNotify annulla la notifica dell'indirizzo IPv4 e le modifiche di route richieste in precedenza con chiamate riuscite alle funzioni NotifyAddrChange o NotifyRouteChange .

Una volta notificata una modifica, l'applicazione può quindi chiamare la funzione GetIpAddrTable o GetAdaptersAddresses per recuperare la tabella degli indirizzi IPv4 per determinare cosa è stato modificato. Se l'applicazione riceve una notifica e richiede la notifica per la modifica successiva, la funzione NotifyAddrChange deve essere chiamata di nuovo.

Se la funzione NotifyAddrChange viene chiamata in modo asincrono, verrà inviata una notifica all'indirizzo IPv4 successivo fino a quando l'applicazione annulla la notifica chiamando la funzione CancelIPChangeNotify o l'applicazione termina. Se l'applicazione termina, il sistema annulla automaticamente la registrazione per la notifica. È comunque consigliabile annullare esplicitamente qualsiasi notifica prima di terminare un'applicazione.

Qualsiasi registrazione per una notifica non persiste in un sistema arrestato o riavviato.

In Windows Vista e versioni successive, la funzione NotifyIpInterfaceChange può essere usata per la registrazione per ricevere una notifica per le modifiche alle interfacce IPv4 e IPv6 nel computer locale.

Esempio

L'esempio seguente attende che si verifichi una modifica nella tabella che esegue il mapping degli indirizzi IP alle interfacce.

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

Requisiti

   
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione iphlpapi.h
Libreria Iphlpapi.lib
DLL Iphlpapi.dll

Vedi anche

CancelIPChangeNotify

GetAdaptersAddresses

GetIpAddrTable

GetOverlappedResult

Informazioni di riferimento sulla funzione helper IP

NotifyIpInterfaceChange

NotifyRouteChange

SOVRAPPOSTA