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


Функция SetIpInterfaceEntry

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

Синтаксис

NETIOAPI_API SetIpInterfaceEntry(
  _Inout_ PMIB_IPINTERFACE_ROW Row
);

Параметры

  • Строка [вход, выход]
    Указатель на запись структуры MIB_IPINTERFACE_ROW для интерфейса. При вводе драйвер должен задать для члена семьи MIB_IPINTERFACE_ROW значение AF_INET6 или AF_INET, а драйвер должен указать элемент InterfaceLuid или InterfaceIndex MIB_IPINTERFACE_ROW. При успешном возвращении элемент InterfaceLuid MIB_IPINTERFACE_ROW заполняется, если указан элемент InterfaceIndex записи MIB_IPINTERFACE_ROW.

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

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

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

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

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

STATUS_NOT_FOUND

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

Другое

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

Комментарии

Драйвер должен использовать функцию InitializeIpInterfaceEntry для инициализации полей записи структуры MIB_IPINTERFACE_ROW со значениями по умолчанию. Затем драйвер может изменить поля в записи MIB_IPINTERFACE_ROW, которую он хочет изменить, а затем вызвать функцию SetIpInterfaceEntry .

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

  • Семейство
    Задайте значение AF_INET или AF_INET6.

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

В выходных данных элемент InterfaceLuid MIB_IPINTERFACE_ROW структуры, на которую указывает параметр Row , заполняется, если был указан InterfaceIndex .

SetIpInterfaceEntry игнорирует элементы MaxReassemblySize, MinRouterAdvertisementInterval, MaxRouterAdvertisementInterval, Connected, SupportsWakeUpPatterns, SupportsNeighborDiscovery, SupportsRouterDiscovery, ReachableTime, TransmitOffload и ReceiveOffload структуры MIB_IPINTERFACE_ROW, на которую указывает параметр Row . Эти элементы задаются сетевым стеком и не могут быть изменены с помощью функции SetIpInterfaceEntry .

Непривилегированные одновременный доступ к нескольким сетям с разными требованиями безопасности создает дыру в безопасности и позволяет непривилегному драйверу случайно ретранслировать данные между двумя сетями. Типичный пример — одновременный доступ к виртуальной частной сети (VPN) и Интернету. Операционные системы Windows Server 2003 и Windows XP используют слабую модель узла, где служба удаленного доступа (RAS) предотвращает такой одновременный доступ за счет увеличения метрики маршрутов всех маршрутов по умолчанию через другие интерфейсы. Таким образом, весь трафик направляется через интерфейс VPN, нарушая другие сетевые подключения.

В Windows Vista и более поздних версиях операционных систем Windows по умолчанию используется надежная модель узла. Если исходный IP-адрес указан в подстановке маршрута с помощью функции GetBestRoute2 , поиск маршрута ограничивается интерфейсом исходного IP-адреса. Изменение метрики маршрута с помощью RAS не оказывает никакого влияния, так как список потенциальных маршрутов даже не имеет маршрута для ИНТЕРФЕЙСА VPN, который обеспечивает трафик в Интернет. Драйвер может использовать элемент DisableDefaultRoutes структуры MIB_IPINTERFACE_ROW для отключения с помощью маршрута по умолчанию в интерфейсе. VPN-клиенты могут использовать этот элемент в качестве меры безопасности для ограничения раздельного туннелирования, если VPN-клиент не требует раздельного туннелирования. VPN-клиент может вызвать функцию SetIpInterfaceEntry , чтобы при необходимости задать для члена DisableDefaultRoutesзначение TRUE . VPN-клиент может запросить текущее состояние члена DisableDefaultRoutes , вызвав функцию GetIpInterfaceEntry .

Требования

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

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

Версия

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

Заголовок

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

Библиотека

Netio.lib

IRQL

< DISPATCH_LEVEL

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

GetBestRoute2

GetIfEntry2

GetIfTable2

GetIfTable2Ex

GetIpInterfaceEntry

GetIpInterfaceTable

InitializeIpInterfaceEntry

MIB_IF_ROW2

MIB_IF_TABLE2

MIB_IPINTERFACE_ROW

MIB_IPINTERFACE_TABLE

NotifyIpInterfaceChange