функция обратного вызова MINIPORT_CO_SEND_NET_BUFFER_LISTS (ndis.h)
Функция MiniportCoSendNetBufferLists передает сетевые данные, содержащиеся в указанном связанном списке NET_BUFFER_LIST структур.
Синтаксис
MINIPORT_CO_SEND_NET_BUFFER_LISTS MiniportCoSendNetBufferLists;
void MiniportCoSendNetBufferLists(
[in] NDIS_HANDLE MiniportVcContext,
[in] PNET_BUFFER_LIST NetBufferLists,
[in] ULONG SendFlags
)
{...}
Параметры
[in] MiniportVcContext
Дескриптор области контекста, выделенной драйвером мини-порта, в которой драйвер мини-порта поддерживает состояние каждого виртуального подключения (VC). Драйвер мини-порта предоставил этот дескриптор NDIS из функции MiniportCoCreateVc .
[in] NetBufferLists
Указатель на первую структуру NET_BUFFER_LIST в связанном списке NET_BUFFER_LIST структур. Каждая структура NET_BUFFER_LIST в списке описывает список NET_BUFFER структур. Каждая NET_BUFFER структура в списке сопоставляется с цепочкой списков дескрипторов памяти (MDL). Многомерные списки содержат сетевые данные, передаваемые MiniportCoSendNetBufferLists .
[in] SendFlags
Флаги, определяющие атрибуты для операции отправки. Флаги можно объединить с побитовой операцией ИЛИ. Чтобы очистить все флаги, задайте для этого параметра нулевое значение. MiniportCoSendNetBufferLists поддерживает следующие флаги:
NDIS_SEND_FLAGS_DISPATCH_LEVEL
При необходимости вызывающий объект может установить этот флаг, если текущий irQL DISPATCH_LEVEL. Дополнительные сведения об этом флаге см. в разделе Dispatch IRQL Tracking.
NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK
NDIS должна проверка для замыкания на себя. По умолчанию NDIS не выполняет цикловую обратную передачу данных в драйвер, отправляющий запрос на отправку. Переопределяющий драйвер может переопределить это поведение, установив флаг NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK . Если этот флаг установлен, NDIS определяет все NET_BUFFER структуры, содержащие данные, соответствующие критериям получения для привязки. NDIS указывает , NET_BUFFER структуры, которые соответствуют критериям для вышеопределяющего драйвера. Этот флаг не влияет на проверку замыкания на себя или зацикливание на других привязках.
Возвращаемое значение
None
Remarks
Для драйверов мини-портов CoNDIS требуется функция MiniportCoSendNetBufferLists . Когда драйвер слишком много раз вызываетФункция NdisCoSendNetBufferLists, NDIS вызывает функцию MiniportCoSendNetBufferLists связанного драйвера мини-порта.
Порядок связанного списка NET_BUFFER_LIST структур, которые NDIS передает в NetBufferLists , представляет порядок передачи сетевых данных драйвером мини-порта. Кроме того, драйвер мини-порта должен отправлять структуры NET_BUFFER_LIST из нескольких вызовов MiniportCoSendNetBufferLists в том порядке, в который драйвер мини-порта получил структуры.
Драйверы мини-портов CoNDIS должны принимать все запросы на отправку, выполняемые NDIS, путем вызова функции MiniportCoSendNetBufferLists . Если драйвер мини-порта не может выполнить запрос на отправку немедленно, драйвер должен держать запрос в очереди, пока он не сможет завершить запрос. Пока запрос на отправку находится в состоянии ожидания, драйвер мини-порта сохраняет за собой право собственности на структуры NET_BUFFER_LIST и все ресурсы, связанные с NET_BUFFER_LIST структурами.
Драйвер мини-порта должен вызватьФункция NdisMCoSendNetBufferListsComplete для выполнения всех запросов отправки CoNDIS. Чтобы повысить производительность компьютера, драйвер может создать связанный список, содержащий структуры NET_BUFFER_LIST из нескольких запросов на отправку. Затем драйвер может передать такой связанный список в одном вызове NdisMCoSendNetBufferListsComplete.
Кроме того, следует предположить, что драйвер мини-порта не может получить доступ к структурам NET_BUFFER_LIST и другим связанным ресурсам, как только драйвер вызывает NdisMCoSendNetBufferListsComplete.
Функция MiniportCoSendNetBufferLists должна синхронизировать доступ к внутренним очередям сетевых данных с другими функциями Драйвера MiniportXxx, которые обращаются к тем же очередям. Драйвер мини-порта может использовать спин-блокировки для синхронизации доступа к очередям.
Драйверы протокола отвечают за определение необходимых сетевых данных на основе среднего типа, выбранного привязанным драйвером мини-порта. Однако драйвер протокола может предоставлять сетевые данные, указывающие пакеты, которые меньше минимального размера пакета для выбранного носителя. В этом случае MiniportCoSendNetBufferLists должен заполнять пакеты нулями, если выбранная среда накладывает требование минимальной длины к размеру передаваемого пакета.
NDIS вызывает MiniportCoSendNetBufferLists по адресу IRQL<= DISPATCH_LEVEL.
Примеры
Чтобы определить функцию MiniportCoSendNetBufferLists , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.Например, чтобы определить функцию MiniportCoSendNetBufferLists с именем MyCoSendNetBufferLists, используйте тип MINIPORT_CO_SEND_NET_BUFFER_LISTS , как показано в следующем примере кода:
MINIPORT_CO_SEND_NET_BUFFER_LISTS MyCoSendNetBufferLists;
Затем реализуйте функцию следующим образом:
_Use_decl_annotations_
VOID
MyCoSendNetBufferLists(
NDIS_HANDLE MiniportVcContext,
PNET_BUFFER_LIST NetBufferLists,
ULONG SendFlags
)
{...}
Тип функции MINIPORT_CO_SEND_NET_BUFFER_LISTS определен в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, применяемых к типу функции MINIPORT_CO_SEND_NET_BUFFER_LISTS в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов NDIS.
Сведения о Use_decl_annotations см. в статье Поведение функции с заметками.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается в NDIS 6.0 и более поздних версиях. |
Целевая платформа | Windows |
Header | ndis.h (включая Ndis.h) |
IRQL | <= DISPATCH_LEVEL |