функция обратного вызова FILTER_SEND_NET_BUFFER_LISTS (ndis.h)

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

Примечание Функцию необходимо объявить с помощью типа FILTER_SEND_NET_BUFFER_LISTS . Дополнительные сведения см. в следующем разделе Примеры.
 

Синтаксис

FILTER_SEND_NET_BUFFER_LISTS FilterSendNetBufferLists;

void FilterSendNetBufferLists(
  [in] NDIS_HANDLE FilterModuleContext,
       PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG SendFlags
)
{...}

Параметры

[in] FilterModuleContext

Дескриптор области контекста для модуля фильтра. Драйвер фильтра создал и инициализировал эту область контекста в функции FilterAttach .

NetBufferList

Указатель на связанный список NET_BUFFER_LIST структур, указывающих списки NET_BUFFER структур. Каждый 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

FilterSendNetBufferLists является необязательной функцией. Если драйвер фильтра не фильтрует отправку запросов, он может задать точку входа для этой функции значение NULL при вызовеФункция NdisFRegisterFilterDriver.

Если драйвер фильтра указывает функцию FilterSendNetBufferLists и помещает в очередь запросы на отправку, он также должен указатьФункция FilterCancelSendNetBufferLists.

Драйвер фильтра может вызвать функцию NdisSetOptionalHandlers из функции FilterSetModuleOptions , чтобы указать функцию FilterSendNetBufferLists для модуля фильтра.

Если драйвер фильтра указывает функцию FilterSendNetBufferLists , NDIS вызывает эту функцию для фильтрации данных, содержащихся в списке NET_BUFFER структур по сети. NDIS задает список NET_BUFFER структур в каждой NET_BUFFER_LIST структуре.

Если драйвер фильтра не указал FilterSendNetBufferLists, NDIS вызывает следующий драйвер фильтра, который находится ниже в стеке драйверов, указав функцию FilterSendNetBufferLists . Если таких базовых драйверов фильтров нет, NDIS вызывает базовый драйверФункция MiniportSendNetBufferLists.

Драйвер фильтра может фильтровать данные и отправлять отфильтрованные данные базовым драйверам. Для каждой структуры NET_BUFFER , отправленной в FilterSendNetBufferLists, драйвер фильтра может выполнять следующие действия:

  • Передайте буфер следующему базовому драйверу, вызвав функцию NdisFSendNetBufferLists . Драйвер фильтра может изменять содержимое буфера перед вызовом NdisFSendNetBufferLists. В этом случае NDIS вызываетФункция FilterSendNetBufferListsComplete после выполнения запроса на отправку базовыми драйверами.
  • Отклоните буфер, вызвав функцию NdisFSendNetBufferListsComplete .
  • Помещите буфер в очередь в локальную структуру данных для последующей обработки.
  • Скопируйте буфер и создайте запрос на отправку с копией. Операция отправки похожа на запрос на отправку, инициированный драйвером фильтра. В этом случае драйвер должен вернуть исходный буфер в вышестоящему драйверу, вызвав функцию NdisFSendNetBufferListsComplete .
После завершения операции отправки драйвер фильтра отменяет изменения, если таковые есть, в дескрипторы буфера, внесенные в функцию FilterSendNetBufferLists . Драйвер вызывает функцию NdisFSendNetBufferListsComplete , чтобы вернуть связанный список NET_BUFFER_LIST структур в вышестоящие драйверы и вернуть окончательное состояние запроса на отправку.

Если модуль фильтра находится в состоянии Приостановлено , драйвер фильтра не должен отправлять запросы на отправку для этого модуля фильтра. Если NDIS вызывает FilterSendNetBufferLists, драйвер не должен вызывать NdisFSendNetBufferLists для передачи данных, пока драйвер не будет перезапущен. Драйвер должен немедленно вызвать NdisFSendNetBufferListsComplete , чтобы завершить операцию отправки. Он должен задать полное состояние в каждой структуре NET_BUFFER_LIST NDIS_STATUS_PAUSED.

NDIS вызывает FilterSendNetBufferLists по адресу IRQL <= DISPATCH_LEVEL.

Примеры

Чтобы определить функцию FilterSendNetBufferLists , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить функцию FilterSendNetBufferLists с именем MySendNetBufferLists, используйте тип FILTER_SEND_NET_BUFFER_LISTS , как показано в следующем примере кода:

FILTER_SEND_NET_BUFFER_LISTS MySendNetBufferLists;

Затем реализуйте функцию следующим образом:

_Use_decl_annotations_
VOID
 MySendNetBufferLists(
    NDIS_HANDLE  FilterModuleContext,
    PNET_BUFFER_LIST  NetBufferLists,
    NDIS_PORT_NUMBER  PortNumber,
    ULONG  SendFlags
    )
  {...}

Тип функции FILTER_SEND_NET_BUFFER_LISTS определен в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, которые применяются к типу функции FILTER_SEND_NET_BUFFER_LISTS в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов NDIS.

Сведения о Use_decl_annotations см. в статье Поведение функции с заметками.

Требования

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

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

FilterAttach

FilterCancelSendNetBufferLists FilterSendNetBufferListsComplete

FilterSetModuleOptions

MiniportSendNetBufferLists

NET_BUFFER

NET_BUFFER_LIST

NdisFRegisterFilterDriver

NdisFSendNetBufferLists

NdisFSendNetBufferListsComplete

NdisMAllocatePort

NdisSetOptionalHandlers

NdisWriteEventLogEntry