Типы NDIS драйверов
Спецификация NDIS определяет три типа сетевых драйверов:
- драйверы протоколов верхнего уровня (upper level protocol drivers);
- драйверы протоколов промежуточного уровня (intermediate protocol drivers);
- драйверы сетевых карт (NIC drivers), сюда входят драйверы сетевых карт локальных сетей (NDIS LAN Miniport NIC drivers) и драйверы сетевых карт глобальных сетей (NDIS WAN Miniport NIC drivers).
Драйверы протоколов верхнего уровня
Драйвер протокола верхнего уровня в своей верхней части предоставляет TDI-интерфейс или, возможно, другой интерфейс, необходимый пользователям сети. Подобные драйверы выделяют ресурсы для пакетов, копируют данные приложения в пакеты и передают их драйверам более низкого уровня посредством вызова NDIS. В своей нижней части этот тип драйверов обеспечивает интерфейс для получения пакетов от нижележащего драйвера и передает полученные данные TDI-клиенту или приложению, для которого они предназначены.
К драйверам протоколов верхнего уровня относится и драйвер транспорта, реализующий стек сетевых протоколов, такой как IPX/SPX или TCP/IP. Транспортный драйвер Windows NT реализует TDI-интерфейс в своей верхней части и использует NDIS библиотеку для взаимодействия с драйверами сетевых карт в своей нижней части.
Драйверы протоколов промежуточного уровня
NDIS драйверы протоколов промежуточного уровня взаимодействуют сверху с драйверами протоколов верхнего уровня (такими как драйверы транспортов), а снизу с NDIS драйверами сетевых карт локальных и глобальных сетей. Ниже NDIS драйвера промежуточного уровня может быть драйвер, не поддерживающий интерфейс NDIS.
NDIS драйверы промежуточного уровня могут служить различным целям, включая фильтрацию и шифрование пакетов, реализацию специализированных протоколов и тому подобные функции.
Для драйвера протокола верхнего уровня промежуточный драйвер выглядит как драйвер виртуальной сетевой карты. Для драйвера реальной сетевой карты – как драйвер протокола. Промежуточные драйверы могут выстраиваться в цепочку, хотя такое расположение может оказывать негативное влияние на производительность системы. Типичный случай разработки и применения промежуточного драйвера – чтобы выполнять преобразование пакетов для среды передачи, неизвестной драйверу транспорта, но поддерживаемой драйвером сетевой карты. Например, может осуществляться преобразование между протоколом локальной сети и ATM протоколом.
NDIS драйвер промежуточного уровня обычно экспортирует MiniportXxx функции на своем верхнем уровне и ProtocolXxx функции на своем нижнем уровне. Реже промежуточный драйвер может экспортировать MiniportXxx функции на своем верхнем уровне, а в своей нижней части предоставлять закрытый интерфейс посредством использования пакетов IRP, нижнему драйверу, не являющемуся NDIS драйвером. Например, промежуточный драйвер может управлять сетевыми запросами ввода/вывода для устройства, соединенного с последовательным портом.