Драйверы мини-портов
Драйвер мини-порта NDIS имеет две основные функции:
Управление сетевым интерфейсом карта (NIC), включая отправку и получение данных через сетевую карту.
Взаимодействие с драйверами более высокого уровня, такими как драйверы фильтров, промежуточные драйверы и драйверы протокола.
Драйвер мини-порта взаимодействует со своими сетевыми адаптерами и драйверами более высокого уровня через библиотеку NDIS. Библиотека NDIS экспортирует полный набор функций (NdisMXxx и другие функции NdisXxx ), которые инкапсулируют все функции операционной системы, которые должен вызывать драйвер мини-порта. Драйвер мини-порта, в свою очередь, должен экспортировать набор точек входа (функции MiniportXxx), которые NDIS вызывает для собственных целей или от имени драйверов более высокого уровня для доступа к драйверу мини-порта.
Примечание
Дополнительные сведения о стеке драйверов NDIS и схема, показывающая связь между всеми четырьмя типами драйверов NDIS, см. в разделе Стек драйверов NDIS.
Следующие операции отправки и получения иллюстрируют взаимодействие драйверов мини-порта с NDIS и драйверами более высокого уровня.
Когда драйвер транспорта имеет пакет для передачи, он вызывает функцию NdisXxx , экспортированную библиотекой NDIS. Затем NDIS передает пакет драйверу мини-порта, вызывая соответствующую функцию MiniportXxx, экспортированную драйвером мини-порта. Затем драйвер мини-порта перенаправит пакет на сетевой адаптер для передачи, вызывая соответствующие функции NdisXxx .
Когда сетевой адаптер получает пакет, адресованный себе, он может опубликовать аппаратное прерывание, которое обрабатывается NDIS или драйвером мини-порта сетевой карты. NDIS уведомляет драйвер мини-порта сетевой карты, вызывая соответствующую функцию MiniportXxx . Драйвер мини-порта настраивает передачу данных с сетевого адаптера, а затем указывает на наличие полученного пакета для привязанных драйверов более высокого уровня, вызывая соответствующую функцию NdisXxx .
Драйверы мини-портов без подключения и Connection-Oriented
NDIS поддерживает драйверы мини-портов как для сред без подключения, так и для сред, ориентированных на подключение.
Драйверы мини-портов без подключения управляют сетевыми картами для сетевых носителей без подключения, таких как Ethernet. Драйверы мини-портов без подключения подразделяются на десериализованные и сериализованные драйверы:
Примечание Все драйверы NDIS 6.0 и более поздних версий десериализируются.
Десериализованные драйверы сериализуют работу собственных функций MiniportXxx и внутренне помещают в очередь все входящие пакеты отправки. Это приводит к значительно более высокой полнодуплексной производительности при условии, что критически важные разделы драйвера (код, который может выполняться только один поток за раз) сохраняются небольшими.
Сериализованные драйверы используют NDIS для сериализации вызовов функций MiniportXxx и управления очередями отправки.
Драйверы мини-портов, ориентированные на подключение , управляют сетевыми картами для сетевых носителей, ориентированных на подключение, таких как ISDN. Драйверы мини-портов, ориентированные на подключение, всегда десериализируются. Они всегда сериализуют работу собственных функций MiniportXxx и помещают в очередь все входящие пакеты отправки.
Драйвер мини-порта NDIS может иметь нижнюю границу, не относясь к NDIS (см. следующий рисунок).
В нижней части, отличной от NDIS, водитель минипорта использует интерфейс класса для шины, например универсальную последовательную шину (USB) для управления устройством в шине. Драйвер мини-порта взаимодействует с устройством, отправляя пакеты запросов ввода-вывода (IRP) в шину или непосредственно на удаленные устройства, подключенные к шине. На верхнем краю драйвера минипорта предоставляется стандартный интерфейс драйвера мини-порта NDIS, который позволяет драйверу минипорта взаимодействовать с более рывками NDIS.