NotifyTeredoPortChange-Funktion (netioapi.h)

Die NotifyTeredoPortChange-Funktion registriert sich, um bei Änderungen an der UDP-Portnummer benachrichtigt zu werden, die vom Teredo-Client für den Teredo-Dienstport auf einem lokalen Computer verwendet wird.

Syntax

IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API NotifyTeredoPortChange(
  [in]      PTEREDO_PORT_CHANGE_CALLBACK Callback,
  [in]      PVOID                        CallerContext,
  [in]      BOOLEAN                      InitialNotification,
  [in, out] HANDLE                       *NotificationHandle
);

Parameter

[in] Callback

Ein Zeiger auf die Funktion, die aufgerufen werden soll, wenn eine Teredo-Clientportänderung erfolgt. Diese Funktion wird aufgerufen, wenn eine Teredo-Portänderungsbenachrichtigung empfangen wird.

[in] CallerContext

Ein Benutzerkontext, der an die Rückruffunktion übergeben wird, die im Rückrufparameter angegeben ist, wenn eine Teredo-Portänderungsbenachrichtigung empfangen wird.

[in] InitialNotification

Ein Wert, der angibt, ob der Rückruf unmittelbar nach Abschluss der Registrierung für änderungsbenachrichtigungen aufgerufen werden soll. Diese anfängliche Benachrichtigung weist nicht darauf hin, dass am Teredo-Clientport eine Änderung aufgetreten ist. Der Zweck dieses Parameters, um die Bestätigung zu geben, dass der Rückruf registriert ist.

[in, out] NotificationHandle

Ein Zeiger, der verwendet wird, um ein Handle zurückzugeben, das später zum Aufheben der Registrierung der Änderungsbenachrichtigung verwendet werden kann. Bei erfolgreicher Ausführung wird in diesem Parameter ein Benachrichtigungshandle zurückgegeben. Wenn ein Fehler auftritt, wird NULL zurückgegeben.

Rückgabewert

Wenn die Funktion erfolgreich ist, wird der Rückgabewert NO_ERROR.

Wenn die Funktion fehlschlägt, ist der Rückgabewert einer der folgenden Fehlercodes.

Rückgabecode Beschreibung
ERROR_INVALID_HANDLE
Es ist ein interner Fehler aufgetreten, bei dem ein ungültiges Handle aufgetreten ist.
ERROR_INVALID_PARAMETER
Es wurde ein ungültiger Parameter an die Funktion übergeben. Dieser Fehler wird zurückgegeben, wenn der Rückrufparameter ein NULL-Zeiger ist.
ERROR_NOT_ENOUGH_MEMORY
Es war nicht genügend Arbeitsspeicher vorhanden.
Andere
Verwenden Sie FormatMessage , um die Nachrichtenzeichenfolge für den zurückgegebenen Fehler abzurufen.

Hinweise

Die NotifyTeredoPortChange-Funktion ist unter Windows Vista und höher definiert.

Die GetTeredoPort-Funktion kann verwendet werden, um die anfängliche UDP-Portnummer abzurufen, die vom Teredo-Client für den Teredo-Dienstport verwendet wird.

Der Teredo-Port ist dynamisch und kann sich jederzeit ändern, wenn der Teredo-Client auf dem lokalen Computer neu gestartet wird. Eine Anwendung kann sich registrieren, um benachrichtigt zu werden, wenn sich der Teredo-Dienstport ändert, indem sie die NotifyTeredoPortChange-Funktion aufruft .

Der Aufruf der Rückruffunktion, die im Rückrufparameter angegeben ist, wird serialisiert. Die Rückruffunktion sollte als Funktion des Typs VOID definiert werden. Zu den Parametern, die an die Rückruffunktion übergeben werden, gehören Folgendes:

Parameter BESCHREIBUNG
IN PVOID CallerContext Der CallerContext-Parameter , der bei der Registrierung für Benachrichtigungen an die NotifyTeredoPortChange-Funktion übergeben wird.
IN USHORT-Port Die UDP-Portnummer, die derzeit vom Teredo-Client verwendet wird. Dieser Parameter ist 0 , wenn der MIB_NOTIFICATION_TYPE Wert, der im NotificationType-Parameter an die Rückruffunktion übergeben wird, auf MibInitialNotification festgelegt ist. Dies kann nur auftreten, wenn der an NotifyTeredoPortChange übergebeneInitialNotification-Parameter beim Registrieren für Benachrichtigungen auf TRUE festgelegt wurde.
IN MIB_NOTIFICATION_TYPE NotificationType Der Benachrichtigungstyp. Dieses Element kann einer der Werte aus dem MIB_NOTIFICATION_TYPE Enumerationstyp sein, der in der Headerdatei Netioapi.h definiert ist.
 

Die im Rückrufparameter angegebene Rückruffunktion muss im selben Prozess implementiert werden wie die Anwendung, die die NotifyTeredoPortChange-Funktion aufruft . Wenn sich die Rückruffunktion in einer separaten DLL befindet, sollte die DLL geladen werden, bevor die NotifyTeredoPortChange-Funktion aufgerufen wird, um sich für Änderungsbenachrichtigungen zu registrieren.

Sobald die NotifyTeredoPortChange-Funktion aufgerufen wird, um sich für Änderungsbenachrichtigungen zu registrieren, werden diese Benachrichtigungen weiterhin gesendet, bis die Anwendung die Registrierung für Änderungsbenachrichtigungen auflöst oder die Anwendung beendet wird. Wenn die Anwendung beendet wird, hebt das System die Registrierung für Änderungsbenachrichtigungen automatisch auf. Es wird weiterhin empfohlen, dass eine Anwendung die Registrierung für Änderungsbenachrichtigungen explizit aufhebt, bevor sie beendet wird.

Jede Registrierung für Änderungsbenachrichtigungen bleibt während eines Herunterfahrens oder Neustarts des Systems nicht erhalten.

Um die Registrierung für Änderungsbenachrichtigungen aufzuheben, rufen Sie die Funktion CancelMibChangeNotify2 und übergeben den von NotifyTeredoPortChange zurückgegebenenNotificationHandle-Parameter.

Eine Anwendung kann keine Funktion CancelMibChangeNotify2 aus dem Kontext des Threads aufrufen, der derzeit die Benachrichtigungsrückruffunktion für denselben NotificationHandle-Parameter ausführt. Andernfalls führt der Thread, der diesen Rückruf ausführt, zu einem Deadlock. Daher darf die CancelMibChangeNotify2-Funktion nicht direkt als Teil der Benachrichtigungsrückrufroutine aufgerufen werden. In einer allgemeineren Situation kann ein Thread, der die CancelMibChangeNotify2-Funktion ausführt, keine Ressource besitzen, für die der Thread, der einen Benachrichtigungsrückrufvorgang ausführt, warten würde, da dies zu einem ähnlichen Deadlock führen würde. Die CancelMibChangeNotify2-Funktion sollte von einem anderen Thread aufgerufen werden, von dem der Thread, der den Benachrichtigungsrückruf empfängt, keine Abhängigkeiten aufweist.

Der Teredo-Client verwendet auch den statischen UDP-Port 3544 zum Lauschen von Multicastdatenverkehr, der an die Multicast-IPv4-Adresse 224.0.0.253 gesendet wird, wie in RFC 4380 definiert. Weitere Informationen finden Sie unter http://www.ietf.org/rfc/rfc4380.txt.

Die NotifyTeredoPortChange-Funktion wird hauptsächlich von Firewallanwendungen verwendet, um die entsprechenden Ausnahmen so zu konfigurieren, dass eingehender und ausgehender Teredo-Datenverkehr zugelassen wird.

Die NotifyStableUnicastIpAddressTable-Funktion wird hauptsächlich von Anwendungen verwendet, die den Teredo-Client verwenden.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile netioapi.h (include Iphlpapi.h)
Bibliothek Iphlpapi.lib
DLL Iphlpapi.dll

Weitere Informationen

CancelMibChangeNotify2

GetTeredoPort

NotifyStableUnicastIpAddressTable