NotifyTeredoPortChange 函数 (netioapi.h)

NotifyTeredoPortChange 函数注册,以通知本地计算机上 Teredo 服务端口的 Teredo 客户端使用的 UDP 端口号更改。

语法

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

参数

[in] Callback

指向发生 Teredo 客户端端口更改时要调用的函数的指针。 收到 Teredo 端口更改通知时,将调用此函数。

[in] CallerContext

收到 Teredo 端口更改通知时传递给 Callback 参数中指定的 回调 函数的用户上下文。

[in] InitialNotification

一个 值,该值指示是否应在更改通知注册完成后立即调用回调。 此初始通知并不表示 Teredo 客户端端口发生了更改。 此参数用于确认回调已注册。

[in, out] NotificationHandle

用于返回句柄的指针,该句柄稍后可用于取消注册更改通知。 成功后,此参数中会返回通知句柄。 如果发生错误,则返回 NULL

返回值

如果函数成功,则返回值NO_ERROR。

如果函数失败,则返回值为以下错误代码之一。

返回代码 说明
ERROR_INVALID_HANDLE
遇到无效句柄时发生内部错误。
ERROR_INVALID_PARAMETER
向该函数传递了无效参数。 如果 Callback 参数为 NULL 指针,则返回此错误。
ERROR_NOT_ENOUGH_MEMORY
内存不足。
其他
使用 FormatMessage 获取返回错误的消息字符串。

注解

NotifyTeredoPortChange 函数在 Windows Vista 及更高版本上定义。

GetTeredoPort 函数可用于检索 Teredo 客户端为 Teredo 服务端口使用的初始 UDP 端口号。

Teredo 端口是动态的,随时可以在本地计算机上重启 Teredo 客户端时更改。 应用程序可以通过调用 NotifyTeredoPortChange 函数注册,以便在 Teredo 服务端口更改时收到通知。

Callback 参数中指定的 回调函数的调用进行序列化。 回调函数应定义为 VOID 类型的函数。 传递给回调函数的参数包括:

参数 说明
IN PVOID CallerContext 注册通知时传递给 NotifyTeredoPortChange 函数的 CallerContext 参数。
在 USHORT 端口 Teredo 客户端当前使用的 UDP 端口号。 将 NotificationType 参数中传递给回调函数的MIB_NOTIFICATION_TYPE值设置为 MibInitialNotification 时,此参数为。 只有在注册通知时传递给 NotifyTeredoPortChangeInitialNotification 参数设置为 TRUE 时,才会发生这种情况。
IN MIB_NOTIFICATION_TYPE NotificationType 通知类型。 此成员可以是 Netioapi.h 头文件中定义的 MIB_NOTIFICATION_TYPE 枚举类型的值之一。
 

Callback 参数中指定的回调函数必须在与调用 NotifyTeredoPortChange 函数的应用程序相同的进程中实现。 如果回调函数位于单独的 DLL 中,则应先加载 DLL,然后再调用 NotifyTeredoPortChange 函数来注册更改通知。

调用 NotifyTeredoPortChange 函数注册更改通知后,将继续发送这些通知,直到应用程序取消更改通知的注册或应用程序终止。 如果应用程序终止,系统将自动取消注册更改通知的任何注册。 仍建议应用程序在终止之前显式取消注册更改通知。

在系统关闭或重新启动时,更改通知的任何注册都不会保留。

若要取消注册更改通知,请调用 CancelMibChangeNotify2 函数,传递 NotifyTeredoPortChange 返回的 NotificationHandle 参数。

应用程序无法从当前正在为同一 NotificationHandle 参数执行通知回调函数的线程的上下文调用 CancelMibChangeNotify2 函数。 否则,执行该回调的线程将导致死锁。 因此,不能在通知回调例程中直接调用 CancelMibChangeNotify2 函数。 在更一般的情况下,执行 CancelMibChangeNotify2 函数的线程不能拥有执行通知回调操作的线程将等待的资源,因为这将导致类似的死锁。 应从其他线程调用 CancelMibChangeNotify2 函数,接收通知回调的线程不依赖于该线程。

Teredo 客户端还使用静态 UDP 端口 3544 侦听在 RFC 4380 中定义的多播 IPv4 地址 224.0.0.253 上发送的多播流量。 有关详细信息,请参阅 http://www.ietf.org/rfc/rfc4380.txt

NotifyTeredoPortChange 函数主要由防火墙应用程序使用,以便配置相应的异常以允许传入和传出 Teredo 流量。

NotifyStableUnicastIpAddressTable 函数主要由使用 Teredo 客户端的应用程序使用。

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 netioapi.h (包括 Iphlpapi.h)
Library Iphlpapi.lib
DLL Iphlpapi.dll

另请参阅

CancelMibChangeNotify2

GetTeredoPort

NotifyStableUnicastIpAddressTable