Функция NdisSendNetBufferLists (ndis.h)

Драйверы протокола вызывают функцию NdisSendNetBufferLists для отправки сетевых данных, содержащихся в списке NET_BUFFER_LIST структур.

Синтаксис

void NdisSendNetBufferLists(
  [in] NDIS_HANDLE                       NdisBindingHandle,
  [in] __drv_aliasesMem PNET_BUFFER_LIST NetBufferLists,
  [in] NDIS_PORT_NUMBER                  PortNumber,
  [in] ULONG                             SendFlags
);

Параметры

[in] NdisBindingHandle

Дескриптор, идентифицирующий целевой адаптер. Предыдущий вызов NdisOpenAdapterEx вернул этот дескриптор.

[in] NetBufferLists

Указатель на связанный список NET_BUFFER_LIST структур. Каждая структура NET_BUFFER_LIST описывает список NET_BUFFER структур.

[in] PortNumber

Номер порта, идентифицирующий порт адаптера мини-порта. Номер порта адаптера мини-порта по умолчанию равен нулю. Драйверы протокола, которые не используют порты адаптера минипорта, должны указывать порт по умолчанию.

[in] SendFlags

Флаги, определяющие атрибуты для операции отправки. Флаги можно объединить с операцией OR. Чтобы очистить все флаги, установите для этого элемента нулевое значение. Эта функция поддерживает следующие флаги:

NDIS_SEND_FLAGS_DISPATCH_LEVEL

Указывает, что текущий irQL DISPATCH_LEVEL. Дополнительные сведения об этом флаге см. в разделе Dispatch IRQL Tracking.

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

Указывает, что NDIS должен проверка для замыкания на себя. По умолчанию NDIS не выполняет цикловую обратную передачу данных в драйвер, отправляющий запрос на отправку. Переопределяющий драйвер может переопределить это поведение, установив этот флаг. Если этот флаг установлен, NDIS определяет все NET_BUFFER структуры, содержащие данные, соответствующие критериям получения привязки. NDIS указывает, NET_BUFFER структуры, которые соответствуют критериям для вышестующего драйвера. Этот флаг не влияет на проверку замыкания на себя или замыкание на другие привязки.

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

None

Remarks

После того как драйвер протокола вызывает NdisSendNetBufferLists, NDIS отправляет структуры NET_BUFFER_LIST в базовый драйвер. Функция MiniportSendNetBufferLists .

Драйвер протокола должен выделить каждую NET_BUFFER_LIST структуру из пула, вызвав одну из следующих функций:

Драйвер протокола может предварительно выделить NET_BUFFER_LIST структуры, например в своей процедуре DriverEntry . Кроме того, драйвер может выделить структуры непосредственно перед вызовом NdisSendNetBufferLists , а затем освободить их после завершения операции отправки. Когда NDIS возвращает структуру NET_BUFFER_LIST в ProtocolSendNetBufferListsComplete, драйвер мини-порта может подготовить структуру NET_BUFFER_LIST и все связанные с ней ресурсы для повторного использования. Повторное использованием NET_BUFFER_LIST структур может обеспечить более высокую производительность, чем возврат структур в пул и последующее перераспределение их для другой операции отправки.

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

Перед вызовом NdisSendNetBufferLists драйвер протокола может задать сведения, сопровождающие запрос на отправку с помощью макроса NET_BUFFER_LIST_INFO . Базовый драйвер может получить эти сведения с помощью макроса NET_BUFFER_LIST_INFO.

Прежде чем драйвер протокола вызовет NdisSendNetBufferLists со списком NET_BUFFER_LIST структур, драйвер протокола должен убедиться, что структуры NET_BUFFER_LIST настроены в порядке передачи сетевых данных по сети.

Как только драйвер протокола вызывает NdisSendNetBufferLists, он откажется от владения NET_BUFFER_LIST структурами и всеми связанными ресурсами. NDIS вызывает функцию ProtocolSendNetBufferListsComplete для возврата структур и данных в драйвер протокола. NDIS может собирать структуры и данные из нескольких запросов на отправку в один связанный список NET_BUFFER_LIST структур до передачи списка в ProtocolSendNetBufferListsComplete.

Пока NDIS не вызовет ProtocolSendNetBufferListsComplete, текущее состояние отправки, инициированной драйвером протокола, недоступно для драйвера протокола. Драйвер протокола временно освобождает владение всеми ресурсами, выделенными для запроса на отправку, при вызове NdisSendNetBufferLists. Драйвер протокола никогда не должен пытаться проверить NET_BUFFER_LIST структуры или связанные с ними данные после вызова NdisSendNetBufferLists.

Требования

Требование Значение
Минимальная версия клиента Поддерживается в NDIS 6.0 и более поздних версиях.
Целевая платформа Универсальное
Верхняя часть ndis.h (включая Ndis.h)
Библиотека Ndis.lib
IRQL <=DISPATCH_LEVEL
Правила соответствия DDI Irql_SendRcv_Function(ndis)

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

DriverEntry

MiniportSendNetBufferLists

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisAllocateCloneNetBufferList NdisAllocateNetBufferAndNetBufferList

NdisAllocateNetBufferList

NdisMAllocatePort

NdisMSendNetBufferListsComplete

NdisOpenAdapterEx

ProtocolSendNetBufferListsComplete