Функция 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 [in, необязательно]
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 и InterfaceIndex не указаны. Эта ошибка также возвращается, если параметр DestinationAddress не указывает IPv4- или IPv6-адрес и семейство. |
STATUS_NOT_FOUND | Не удалось найти указанный интерфейс. Эта ошибка возвращается, если не удалось найти сетевой интерфейс, указанный параметром InterfaceLuid или InterfaceIndex . |
STATUS_NOT_SUPPORTED | Запрос не поддерживается. Эта ошибка возвращается, если на локальном компьютере не расположен стек IPv4, а в параметре DestinationAddress указаны IPv4-адрес и семейство IPv4-адресов или если на локальном компьютере нет стека IPv6, а адрес И семейство IPv4 были указаны в параметре DestinationAddress . |
Другое | Используйте функцию FormatMessage , чтобы получить строку сообщения для возвращаемой ошибки. |
Комментарии
Функция GetBestRoute2 используется для получения записи структуры MIB_IPFORWARD_ROW2 для оптимального маршрута от исходного IP-адреса к целевому IP-адресу.
При входе драйвер должен инициализировать следующие параметры.
DestinationAddress
Задайте допустимый IPv4- или IPv6-адрес и семейство.InterfaceLuid или InterfaceIndex
Эти параметры используются в порядке, указанном ранее. Поэтому, если указан InterfaceLuid , этот параметр используется для определения интерфейса. Если для элемента InterfaceLuid не задано значение (значение этого параметра равно нулю), для определения интерфейса используется параметр InterfaceIndex .
Кроме того, при входе драйвер может инициализировать параметр SourceAddress для предпочитаемого IPv4 или IPv6-адреса и семейства.
При успешном вызове GetBestRoute2 извлекает структуру MIB_IPFORWARD_ROW2 для наилучшего маршрута с исходного IP-адреса и целевого IP-адреса.
Требования
Целевая платформа |
Универсальное |
Версия |
Доступно в Windows Vista и более поздних версиях операционных систем Windows. |
Заголовок |
Netioapi.h (включая Netioapi.h) |
Библиотека |
Netio.lib |
IRQL |
< DISPATCH_LEVEL |