Поделиться через


Функция NotifyStableUnicastIpAddressTable

Функция NotifyStableUnicastIpAddressTable извлекает стабильную таблицу одноадресных IP-адресов на локальном компьютере.

Синтаксис

NETIOAPI_API NotifyStableUnicastIpAddressTable(
  _In_    ADDRESS_FAMILY                           Family,
  _Out_   PMIB_UNICASTIPADDRESS_TABLE              *Table,
  _In_    PSTABLE_UNICAST_IPADDRESS_TABLE_CALLBACK CallerCallback,
  _In_    PVOID                                    CallerContext,
  _Inout_ HANDLE                                   *NotificationHandle
);

Параметры

  • Family [in]
    Извлекаемая семья адресов.

    Возможные значения для семейства адресов перечислены в файле заголовка Winsock2.h. Обратите внимание, что значения для семейства адресов AF_ и констант семейства PF_ протоколов идентичны (например, AF_INET и PF_INET), поэтому можно использовать обе константы.

    В Windows Vista и более поздних версиях операционных систем Windows возможные значения параметра Family определяются в файле заголовка Ws2def.h. Обратите внимание, что файл заголовка Ws2def.h автоматически включается в Netioapi.h, и никогда не следует использовать Ws2def.h напрямую.

    В настоящее время для семейства адресов поддерживаются следующие значения:

    • AF_INET
      Семейство адресов IPv4. Если это значение указано, функция извлекает стабильную таблицу одноадресных IP-адресов, содержащую только записи IPv4.

    • AF_INET6
      Семейство адресов IPv6. Если это значение указано, функция получает стабильную таблицу одноадресных IP-адресов, содержащую только записи IPv6.

    • AF_UNSPEC
      Семейство адресов не указано. Если указано это значение, функция извлекает стабильную таблицу одноадресных IP-адресов, содержащую записи IPv4 и IPv6.

  • Таблица [out]
    Указатель на структуру MIB_UNICASTIPADDRESS_TABLE . При успешном выполнении notifyStableUnicastIpAddressTable этот параметр возвращает стабильную таблицу одноадресных IP-адресов на локальном компьютере.

    Когда NotifyStableUnicastIpAddressTable возвращает ERROR_IO_PENDING, что указывает на ожидание запроса ввода-вывода, стабильная таблица одноадресных IP-адресов возвращается в функцию в параметре CallerCallback .

  • CallerCallback [in]
    Указатель на функцию для вызова со стабильной таблицей одноадресных IP-адресов. Эта функция вызывается, если NotifyStableUnicastIpAddressTable возвращает ERROR_IO_PENDING, что указывает на ожидание запроса ввода-вывода.

  • CallerContext [in]
    Контекст пользователя, передаваемый в функцию обратного вызова, указанную в параметре CallerCallback , когда доступна стабильная таблица одноадресных IP-адресов.

  • NotificationHandle [вход, выход]
    Указатель, используемый для возврата дескриптора, который драйвер может использовать для отмены запроса на получение стабильной таблицы ip-адресов одноадресной рассылки. Этот параметр возвращается, если значение, возвращаемое из NotifyStableUnicastIpAddressTable , ERROR_IO_PENDING, что указывает на ожидание запроса ввода-вывода.

Возвращаемое значение

NotifyStableUnicastIpAddressTable возвращает STATUS_SUCCESS и стабильная одноадресная ip-таблица возвращается в параметре Table , если функция выполняется немедленно.

Если запрос ввода-вывода находится в состоянии ожидания, функция возвращает ERROR_IO_PENDING, а функция, на которую указывает параметр CallerCallback , вызывается после завершения запроса ввода-вывода со стабильной таблицей одноадресных IP-адресов.

В случае сбоя функции NotifyStableUnicastIpAddressTable возвращает один из следующих кодов ошибок:

Код возврата Описание
ERROR_INVALID_HANDLE

Произошла внутренняя ошибка при обнаружении недопустимого дескриптора.

STATUS_INVALID_PARAMETER

В функцию передан недопустимый параметр. Эта ошибка возвращается, если параметр Table был указателем NULL , параметр NotificationHandle был указателем NULL или параметр Family не был AF_INET, AF_INET6 или AF_UNSPEC.

STATUS_NOT_ENOUGH_MEMORY

Недостаточно памяти.

Другое

Используйте функцию FormatMessage , чтобы получить строку сообщения для возвращаемой ошибки.

Комментарии

Все IP-адреса одноадресной рассылки, за исключением адресов с телефонным подключением по запросу, считаются стабильными только в том случае, если они находятся в предпочтительном состоянии. Для обычной записи одноадресного IP-адреса это состояние будет соответствовать элементу DadStateMIB_UNICASTIPADDRESS_ROW для IP-адреса, которому задано значение IpDadStatePreferred. Каждый адрес с телефонным подключением по запросу определяет собственную метрику стабильности. В настоящее время функция NotifyStableUnicastIpAddressTable считает единственным адресом с телефонным подключением по запросу, является одноадресный IP-адрес, используемый клиентом Teredo на локальном компьютере.

Драйвер должен задать для параметра Family значение AF_INET, AF_INET6 или AF_UNSPEC.

Если notifyStableUnicastIpAddressTable успешно выполняется и возвращает STATUS_SUCCESS, параметр Table возвращает стабильную одноадресную таблицу IP-адресов на локальном компьютере.

Когда NotifyStableUnicastIpAddressTable возвращает ERROR_IO_PENDING, что указывает на ожидание запроса ввода-вывода, стабильная таблица одноадресных IP-адресов возвращается в функцию в параметре CallerCallback .

Если IP-адрес одноадресной рассылки, который использует Teredo, доступен на локальном компьютере, но не находится в стабильном (квалифицированном) состоянии, NotifyStableUnicastIpAddressTable возвращает ERROR_IO_PENDING и стабильная таблица одноадресных IP-адресов в конечном итоге возвращается путем вызова функции в параметре CallerCallback . Если адрес Teredo недоступен или находится в стабильном состоянии, а другие одноадресные IP-адреса находятся в стабильном состоянии, функция в параметре CallerCallback никогда не вызывается.

Функция обратного вызова, указанная в параметре CallerCallback , должна быть определена как функция типа VOID. Параметры, передаваемые функции обратного вызова, включают следующие.

Параметр Описание

IN PVOID CallerContext

Параметр CallerContext , который передается функции NotifyStableUnicastIpAddressTable при регистрации драйвера для уведомлений.

IN PMIB_UNICASTIPADDRESS_TABLE AddressTable

Указатель на структуру MIB_UNICASTIPADDRESS_TABLE , содержащую стабильную таблицу одноадресных IP-адресов на локальном компьютере.

Функция NotifyStableUnicastIpAddressTable используется в основном драйверами, которые используют клиент Teredo.

Чтобы отменить уведомление после завершения обратного вызова, вызовите функцию CancelMibChangeNotify2 , передав параметр NotificationHandle , возвращаемый NotifyStableUnicastIpAddressTable .

Требования

Целевая платформа

Универсальное

Версия

Доступно в Windows Vista и более поздних версиях операционных систем Windows.

Заголовок

Netioapi.h (включая Netioapi.h)

Библиотека

Netio.lib

IRQL

< DISPATCH_LEVEL

См. также раздел

CancelMibChangeNotify2

CreateUnicastIpAddressEntry

DeleteUnicastIpAddressEntry

GetTeredoPort

GetUnicastIpAddressEntry

GetUnicastIpAddressTable

InitializeUnicastIpAddressEntry

MIB_NOTIFICATION_TYPE

MIB_UNICASTIPADDRESS_ROW

MIB_UNICASTIPADDRESS_TABLE

NotifyTeredoPortChange

NotifyUnicastIpAddressChange

SetUnicastIpAddressEntry