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


Функция 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. Дополнительные сведения об этом флаге см. в отслеживания IRQL.

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

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

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

Никакой

Замечания

После вызова драйвера протокола 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 (include 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