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

Драйверы фильтров вызывают функцию NdisFSendNetBufferLists для отправки списка сетевых буферов данных.

Синтаксис

void NdisFSendNetBufferLists(
  [in] NDIS_HANDLE                       NdisFilterHandle,
       __drv_aliasesMem PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER                  PortNumber,
  [in] ULONG                             SendFlags
);

Параметры

[in] NdisFilterHandle

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

NetBufferList

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

[in] PortNumber

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

[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 структуры, которые соответствуют критериям для вышеопределяющего драйвера. Этот флаг не влияет на проверку замыкания на себя или циклов в других привязках.

NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE

Если этот флаг установлен, все пакеты в связанном списке NET_BUFFER_LIST структур исходят из одного порта источника расширяемого коммутатора Hyper-V.

Дополнительные сведения см. в статье Флаги отправки и получения расширяемого коммутатора Hyper-V.

Примечание Если каждый пакет из связанного списка NET_BUFFER_LIST структур использует один и тот же исходный порт, расширение должно установить флаг NDIS_SEND_COMPLETE_FLAGS_SWITCH_SINGLE_SOURCE в параметре SendCompleteFlagsобъекта NdisFSendNetBufferListsComplete при выполнении запроса на отправку.
 
Примечание Этот флаг доступен в NDIS 6.30 и более поздних версиях.
 

NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP

Если этот флаг установлен, все пакеты в связанном списке NET_BUFFER_LIST структур перенаправляются на один и тот же порт назначения расширяемого коммутатора.

Дополнительные сведения см. в статье Флаги отправки и получения расширяемого коммутатора Hyper-V.

Примечание Этот флаг доступен в NDIS 6.30 и более поздних версиях.
 

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

None

Remarks

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

Драйвер фильтра может отправлять запросы на отправку или фильтровать запросы, получаемые от слишком параметров. Если драйвер фильтра отправляет запросы на отправку, драйвер должен выделить пулы буферов. Драйвер фильтра выделяет каждую NET_BUFFER_LIST структуру из пула.

Драйвер фильтра может предварительно выделить NET_BUFFER_LIST структуры или выделить структуры непосредственно перед вызовом NdisFSendNetBufferLists , а затем освободить их после завершения операции отправки.

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

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

NDIS вызывает драйвер фильтраФункция FilterSendNetBufferLists для передачи запросов на отправку от вышестояющих драйверов. Драйвер фильтра может передавать такие запросы, передав структуры NET_BUFFER_LISTT, полученные в FilterSendNetBufferLists , в NdisFSendNetBufferLists.

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

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

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

Требования

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

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

FilterAttach

FilterSendNetBufferLists

FilterSendNetBufferListsComplete

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisMAllocatePort