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


Функция CreateIpForwardEntry2

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

Синтаксис

NETIOAPI_API CreateIpForwardEntry2(
  _In_ const MIB_IPFORWARD_ROW2 *Row
);

Параметры

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

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

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

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

В функцию передан недопустимый параметр. Эта ошибка возвращается, если возникает одна из следующих ситуаций:

  • В параметре Row передается указатель NULL.

  • Элемент DestinationPrefixструктуры MIB_IPFORWARD_ROW2 , на которую указывает параметр Row , не указан.

  • Не указан элемент NextHop структуры MIB_IPFORWARD_ROW2.

  • Элементы InterfaceLuid и InterfaceIndex структуры MIB_IPFORWARD_ROW2 не указаны.

  • Элемент PreferredLifetime структуры MIB_IPFORWARD_ROW2 больше, чем элемент ValidLifetime .

  • Элемент SitePrefixLength структуры MIB_IPFORWARD_ROW2 превышает длину префикса, указанную элементом DestinationPrefix .

Эта ошибка возвращается, если в параметре Row передан указатель NULL, не указан элемент DestinationPrefixструктуры MIB_IPFORWARD_ROW2, на который указывает параметр Row, не указан элемент NextHop структуры MIB_IPFORWARD_ROW2 или элементы InterfaceLuid и InterfaceIndex структуры MIB_IPFORWARD_ROW2 не указаны. Эта ошибка также возвращается, если элемент PreferredLifetime , указанный в структуре MIB_IPFORWARD_ROW2, больше элемента ValidLifetime или если SitePrefixLength в структуре MIB_IPFORWARD_ROW2 больше длины префикса, указанной в элементе DestinationPrefix .

STATUS_NOT_FOUND

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

STATUS_NOT_SUPPORTED

Запрос не поддерживается. Эта ошибка возвращается, если указанный интерфейс не поддерживает маршруты. Эта ошибка возвращается, если на локальном компьютере не расположен стек IPv4 и AF_INET был указан в семействе адресов в элементе DestinationPrefix структуры MIB_IPFORWARD_ROW2, на которую указывает параметр Row , или если на локальном компьютере не расположен стек IPv6 и AF_INET6 был указан для семейства адресов в элементе DestinationPrefix .

ERROR_OBJECT_ALREADY_EXISTS

Объект уже существует. Эта ошибка возвращается, если элемент DestinationPrefix структуры MIB_IPFORWARD_ROW2, на которую указывает параметр Row , является дубликатом существующей записи IP-маршрута в интерфейсе, заданном элементом InterfaceLuid или InterfaceIndex структуры MIB_IPFORWARD_ROW2.

Другое

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

Комментарии

Функция CreateIpForwardEntry2 используется для добавления новой записи соседнего IP-адреса на локальном компьютере. Используйте функцию InitializeIpForwardEntry для инициализации элементов записи MIB_IPFORWARD_ROW2 структуры со значениями по умолчанию. Затем драйвер может изменить элементы в записи MIB_IPFORWARD_ROW2, которую он хочет изменить, а затем вызвать CreateIpForwardEntry2.

Драйвер должен инициализировать следующие элементы структуры MIB_IPFORWARD_ROW2, на которые указывает параметр Row :

  • Задайте для параметра DestinationPrefix допустимый префикс IPv4 или IPv6-адреса.

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

  • Задайте для InterfaceLuid или InterfaceIndex значение LUID или индекса интерфейса.

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

Смещение метрики маршрута, указанное в элементе Метрики MIB_IPFORWARD_ROW2 структуры, на которую указывает параметр Row , представляет только часть полной метрики маршрута. Полная метрика — это сочетание смещения этой метрики маршрута, добавленной в метрику интерфейса, указанную в элементе MetricMIB_IPINTERFACE_ROW структуры связанного интерфейса. Драйвер может получить метрику интерфейса, вызвав функцию GetIpInterfaceEntry .

Элементы Age и Origin структуры MIB_IPFORWARD_ROW2, на которые указывает параметр Row , игнорируются при вызове функции CreateIpForwardEntry2 . Эти элементы задаются сетевым стеком и не могут быть заданы с помощью функции CreateIpForwardEntry2 .

Функция CreateIpForwardEntry2 завершается ошибкой, если элементы DestinationPrefix и NextHop структуры MIB_IPFORWARD_ROW2, на которую указывает параметр Row , являются дубликатом существующей записи IP-маршрута в интерфейсе, указанном в элементах InterfaceLuid или InterfaceIndex .

Требования

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

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

Версия

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

Заголовок

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

Библиотека

Netio.lib

IRQL

< DISPATCH_LEVEL

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

DeleteIpForwardEntry2

GetBestRoute2

GetIpForwardEntry2

GetIpForwardTable2

GetIpInterfaceEntry

InitializeIpForwardEntry

MIB_IPFORWARD_ROW2

MIB_IPFORWARD_TABLE2

MIB_IPINTERFACE_ROW

NotifyRouteChange2

SetIpForwardEntry2