Функция NotifyTeredoPortChange (netioapi.h)
Функция NotifyTeredoPortChange регистрирует уведомления об изменениях номера порта UDP, используемого клиентом Teredo для порта службы Teredo на локальном компьютере.
Синтаксис
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
Контекст пользователя, передаваемый в функцию обратного вызова, указанную в параметре Callback , при получении уведомления об изменении порта Teredo.
[in] InitialNotification
Значение типа , указывающее, следует ли вызывать обратный вызов сразу после завершения регистрации уведомления об изменениях. Это начальное уведомление не указывает на изменение порта клиента Teredo. Назначение этого параметра для подтверждения регистрации обратного вызова.
[in, out] NotificationHandle
Указатель, используемый для возврата дескриптора, который позже можно использовать для отмены регистрации уведомления об изменениях. При успешном выполнении в этом параметре возвращается дескриптор уведомления. При возникновении ошибки возвращается значение NULL .
Возвращаемое значение
Если функция выполняется успешно, возвращаемое значение будет NO_ERROR.
Если функция завершается сбоем, возвращаемое значение представляет собой один из следующих кодов ошибок.
Код возврата | Описание |
---|---|
|
Произошла внутренняя ошибка при обнаружении недопустимого дескриптора. |
|
В функцию передан недопустимый параметр. Эта ошибка возвращается, если параметр Callback является указателем NULL . |
|
Недостаточно памяти. |
|
Используйте FormatMessage , чтобы получить строку сообщения для возвращенной ошибки. |
Комментарии
Функция NotifyTeredoPortChange определена в Windows Vista и более поздних версиях.
Функцию GetTeredoPort можно использовать для получения начального номера порта UDP, используемого клиентом Teredo для порта службы Teredo.
Порт Teredo является динамическим и может измениться при перезапуске клиента Teredo на локальном компьютере. Приложение можно зарегистрировать для получения уведомлений о смене порта службы Teredo, вызвав функцию NotifyTeredoPortChange .
Вызов функции обратного вызова, указанной в параметре Callback , сериализуется. Функция обратного вызова должна быть определена как функция типа VOID. В функцию обратного вызова передаются следующие параметры:
Параметр | Описание |
---|---|
IN PVOID CallerContext | Параметр CallerContext , передаваемый в функцию NotifyTeredoPortChange при регистрации для уведомлений. |
В порте USHORT | Номер порта UDP, который в настоящее время используется клиентом Teredo. Этот параметр равен нулю , если значение MIB_NOTIFICATION_TYPE , передаваемое в параметре NotificationType функции обратного вызова, имеет значение MibInitialNotification. Это может произойти только в том случае, если параметр InitialNotification , переданный в NotifyTeredoPortChange , был установлен в значение TRUE при регистрации для уведомлений. |
IN MIB_NOTIFICATION_TYPE NotificationType | Тип уведомления. Этот элемент может быть одним из значений из типа перечисления MIB_NOTIFICATION_TYPE , определенного в файле заголовка Netioapi.h . |
Функция обратного вызова, указанная в параметре Callback , должна быть реализована в том же процессе, что и приложение, вызывающее функцию NotifyTeredoPortChange . Если функция обратного вызова находится в отдельной библиотеке DLL, то библиотека DLL должна быть загружена перед вызовом функции NotifyTeredoPortChange для регистрации уведомлений об изменениях.
После вызова функции NotifyTeredoPortChange для регистрации для получения уведомлений об изменениях эти уведомления будут отправляться до тех пор, пока приложение не отменит регистрацию уведомлений об изменениях или не завершит работу приложения. В случае завершения работы приложения система автоматически отменит регистрацию для уведомлений об изменениях. По-прежнему рекомендуется явно отменить регистрацию для уведомлений об изменениях перед завершением работы приложения.
Регистрация уведомлений об изменениях не сохраняется при завершении работы или перезагрузке системы.
Чтобы отменить регистрацию уведомлений об изменениях, вызовите функцию CancelMibChangeNotify2 , передав параметр NotificationHandle , возвращенный NotifyTeredoPortChange.
Приложение не может вызвать функцию CancelMibChangeNotify2 из контекста потока, который в настоящее время выполняет функцию обратного вызова уведомления для того же параметра NotificationHandle . В противном случае поток, выполняющий этот обратный вызов, приведет к взаимоблокировке. Поэтому функцию CancelMibChangeNotify2 нельзя вызывать напрямую в рамках процедуры обратного вызова уведомления. В более общей ситуации поток, выполняющий функцию CancelMibChangeNotify2 , не может владеть ресурсом, для которого поток, выполняющий операцию обратного вызова уведомления, будет ждать, так как это приведет к аналогичной взаимоблокировке. Функция CancelMibChangeNotify2 должна вызываться из другого потока, от которого поток, получающий обратный вызов уведомления, не имеет зависимостей.
Клиент Teredo также использует статический UDP-порт 3544 для прослушивания многоадресного трафика, отправленного по многоадресной IPv4-адресу 224.0.0.253, как определено в RFC 4380. Для получения дополнительной информации см. http://www.ietf.org/rfc/rfc4380.txt.
Функция NotifyTeredoPortChange используется в основном приложениями брандмауэра для настройки соответствующих исключений для разрешения входящего и исходящего трафика Teredo.
Функция NotifyStableUnicastIpAddressTable используется в основном приложениями, которые используют клиент Teredo.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | netioapi.h (включая Iphlpapi.h) |
Библиотека | Iphlpapi.lib |
DLL | Iphlpapi.dll |