Функция 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-адреса.