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


Отправка структур NET_BUFFER из драйверов CoNDIS

На следующем рисунке показана базовая операция отправки CoNDIS, которая включает драйвер протокола, NDIS и драйвер мини-порта.

Схема, иллюстрирующая простую операцию отправки CoNDIS с использованием драйвера протокола, NDIS и драйвера мини-порта.

Как показано на предыдущем рисунке, драйверы протоколов вызывают функцию NdisCoSendNetBufferLists для отправки NET_BUFFER_LIST структур в виртуальном подключении (VC). Затем NDIS вызывает функцию MiniportCoSendNetBufferLists драйвера мини-порта, чтобы перенаправить структуры NET_BUFFER_LIST в базовый драйвер мини-порта.

Все операции отправки на основе NET_BUFFER являются асинхронными. Поэтому драйвер мини-порта всегда вызывает функцию NdisMCoSendNetBufferListsComplete и предоставляет соответствующий код состояния после отправки данных. Драйвер мини-порта может завершить операцию отправки для каждой структуры NET_BUFFER_LIST независимо от других NET_BUFFER_LIST структур. NDIS вызывает функцию ProtocolCoSendNetBufferListsComplete драйвера протокола каждый раз, когда драйвер минипорта вызывает NdisMCoSendNetBufferListsComplete.

Драйверы протокола могут вернуть права владения NET_BUFFER_LIST структурами и всеми связанными структурами и данными, как только NDIS вызывает функцию ProtocolCoSendNetBufferListsComplete драйвера протокола.

Драйвер мини-порта или NDIS могут возвращать структуры NET_BUFFER_LIST в любом порядке. Но драйверы протокола гарантируют, что список NET_BUFFER структур, присоединенных к каждой NET_BUFFER_LIST структуре, не был изменен.

Драйверы протоколов задают члену SourceHandle в структуре NET_BUFFER_LIST то же значение, что и параметр NdisVcHandleNdisCoSendNetBufferLists. NDIS использует член SourceHandle для возврата структур NET_BUFFER_LIST драйверу протокола, отправляющего структуры NET_BUFFER_LIST.

Промежуточные драйверы также устанавливают для элемента SourceHandle в структуре NET_BUFFER_LIST значение NdisVcHandle . Если промежуточный драйвер пересылает запрос на отправку, драйвер должен сохранить значение SourceHandle , предоставленное драйвером, прежде чем выполнять запись в член SourceHandle . Когда NDIS возвращает переадресованную структуру NET_BUFFER_LIST промежуточному драйверу, промежуточный драйвер должен восстановить сохраненный объект SourceHandle .

Драйверы протокола могут отменять запросы на отправку с помощью тех же механизмов, что и драйверы без подключения. Дополнительные сведения об отмене запросов на отправку см. в разделе Отмена операции отправки.