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 .
[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 |
---|---|
|
Il contesto viene deregisterato, quindi la chiamata è stata annullata immediatamente. |
|
È 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. |
|
Memoria insufficiente per completare l'operazione. |
|
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 |