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 に設定されている場合、このパラメーターは 0 です。 これは、通知の登録時に NotifyTeredoPortChange に渡された InitialNotification パラメーターが TRUE に設定されている場合にのみ発生します。
IN MIB_NOTIFICATION_TYPE NotificationType 通知の種類。 このメンバーには、Netioapi.h ヘッダー ファイルで定義されているMIB_NOTIFICATION_TYPE列挙型の値のいずれかを指定できます。
 

Callback パラメーターで指定されたコールバック関数は、NotifyTeredoPortChange 関数を呼び出すアプリケーションと同じプロセスで実装する必要があります。 コールバック関数が別の DLL 内にある場合は、 NotifyTeredoPortChange 関数を呼び出して変更通知を登録する前に DLL を読み込む必要があります。

変更通知を登録するために NotifyTeredoPortChange 関数が呼び出されると、アプリケーションが変更通知の登録を解除するか、アプリケーションが終了するまで、これらの通知は引き続き送信されます。 アプリケーションが終了すると、システムは変更通知の登録を自動的に登録解除します。 変更通知が終了する前に、アプリケーションで変更通知の登録を明示的に解除することをお勧めします。

変更通知の登録は、システムのシャットダウンまたは再起動間で保持されません。

変更通知の登録を解除するには、NotifyTeredoPortChange によって返される NotificationHandle パラメーターを渡して CancelMibChangeNotify2 関数を呼び出します。

アプリケーションは、同じ NotificationHandle パラメーターの通知コールバック関数を現在実行しているスレッドのコンテキストから CancelMibChangeNotify2 関数を呼び出すことはできません。 それ以外の場合、そのコールバックを実行するスレッドはデッドロックになります。 そのため、 CancelMibChangeNotify2 関数を通知コールバック ルーチンの一部として直接呼び出すことはできません。 より一般的な状況では、 CancelMibChangeNotify2 関数を実行するスレッドは、通知コールバック操作を実行するスレッドが同様のデッドロックが発生するため待機するリソースを所有できません。 CancelMibChangeNotify2 関数は、通知コールバックを受け取るスレッドが依存関係を持たない別のスレッドから呼び出す必要があります。

Teredo クライアントは、RFC 4380 で定義されているマルチキャスト IPv4 アドレス 224.0.0.253 で送信されたマルチキャスト トラフィックをリッスンするために、静的 UDP ポート 3544 も使用します。 詳細については、「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