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


Функция GetBestRoute2

Функция GetBestRoute2 извлекает запись IP-маршрута на локальном компьютере для оптимального маршрута к указанному IP-адресу назначения.

Синтаксис

NETIOAPI_API GetBestRoute2(
  _In_opt_       NET_LUID            *InterfaceLuid,
  _In_           NET_IFINDEX         InterfaceIndex,
  _In_opt_ const SOCKADDR_INET       *SourceAddress,
  _In_     const SOCKADDR_INET       *DestinationAddress,
  _In_           ULONG               AddressSortOptions,
  _Out_          PMIB_IPFORWARD_ROW2 BestRoute,
  _Out_          SOCKADDR_INET       *BestSourceAddress
);

Параметры

  • InterfaceLuid [in, необязательный]
    Локальный уникальный идентификатор (LUID) для указания сетевого интерфейса, связанного с записью IP-маршрута.

  • InterfaceIndex [in]
    Значение локального индекса, указывающее сетевой интерфейс, связанный с записью IP-маршрута. Это значение индекса может измениться, если сетевой адаптер отключен, а затем включен или при других обстоятельствах, поэтому это значение не сохраняется.

  • SourceAddress [в, необязательно]
    Исходный IP-адрес. Драйвер может опустить этот параметр и передать указатель NULL.

  • DestinationAddress [in]
    IP-адрес назначения.

  • AddressSortOptions [in]
    Набор параметров, влияющих на сортировку IP-адресов. Этот параметр в настоящее время не используется.

  • BestRoute [out]
    Указатель на структуру MIB_IPFORWARD_ROW2 для оптимального маршрута от исходного IP-адреса к целевому IP-адресу.

  • BestSourceAddress [out]
    Указатель на лучший исходный IP-адрес.

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

GetBestRoute2 возвращает STATUS_SUCCESS, если функция выполнена успешно.

Если функция завершается ошибкой, GetBestRoute2 возвращает один из следующих кодов ошибок:

Возвращаемый код Описание
STATUS_INVALID_PARAMETER

Недопустимый параметр был передан функции. Эта ошибка возвращается, если указатель NULL передается в DestinationAddress, BestSourceAddressили параметры BestRoute. Эта ошибка также возвращается, если параметры InterfaceLuid и InterfaceIn dex не указаны. Эта ошибка также возвращается, если параметр DestinationAddress не указывает IPv4 или IPv6-адрес и семейство

STATUS_NOT_FOUND

Не удалось найти указанный интерфейс. Эта ошибка возвращается, если сетевой интерфейс, указанный параметр ом InterfaceLuid или InterfaceIndex, не найден.

STATUS_NOT_SUPPORTED

Запрос не поддерживается. Эта ошибка возвращается, если на локальном компьютере не расположен стек IPv4, а адрес и семейство IPv4 были указаны в параметре DestinationAddress или если на локальном компьютере не находится стек IPv4, а в параметре DestinationAddress указан стек IPv4.

Другие

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

Замечания

Функция GetBestRoute2 используется для получения записи структуры MIB_IPFORWARD_ROW2 для оптимального маршрута от исходного IP-адреса к целевому IP-адресу.

При входе драйвер должен инициализировать следующие параметры.

  • DestinationAddress
    Задайте допустимый IPv4-адрес и семейство IPv6.

  • InterfaceLuid или InterfaceIn dex
    Эти параметры используются в порядке, указанном ранее. Поэтому если указан InterfaceLuid, этот параметр используется для определения интерфейса. Если для элемента InterfaceLuid (значение этого параметра было задано нулю), параметр InterfaceIndex используется для определения интерфейса.

Кроме того, при входе драйвер может инициализировать параметр SourceAddress в предпочитаемый IPv4 или IPv6-адрес и семейство.

При успешном вызове GetBestRoute2 извлекает структуру MIB_IPFORWARD_ROW2 для оптимального маршрута из исходного IP-адреса целевого IP-адреса.

Требования

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

универсальные

Версия

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

Заголовок

Netioapi.h (include Netioapi.h)

Библиотека

Netio.lib

IRQL

< DISPATCH_LEVEL

См. также

CreateIpForwardEntry2

DeleteIpForwardEntry2

GetIpForwardEntry2

GetIpForwardTable2

InitializeIpForwardEntry

MIB_IPFORWARD_ROW2

MIB_IPFORWARD_TABLE2

NotifyRouteChange2

SetIpForwardEntry2