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


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

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 и более поздних версиях.
 

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

Никакой

Замечания

Когда драйвер фильтра вызывает функцию 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 (include 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