Функция 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 |