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


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

Драйвер фильтра вызывает NdisFIndicateReceiveNetBufferLists, чтобы указать, что он получил сетевые данные. Дополнительные сведения см. в получении данных вдрайвера фильтра.

Синтаксис

void NdisFIndicateReceiveNetBufferLists(
  [in] NDIS_HANDLE      NdisFilterHandle,
  [in] PNET_BUFFER_LIST NetBufferLists,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG            NumberOfNetBufferLists,
  [in] ULONG            ReceiveFlags
);

Параметры

[in] NdisFilterHandle

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

[in] NetBufferLists

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

[in] PortNumber

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

[in] NumberOfNetBufferLists

Количество структур NET_BUFFER_LIST, которые находятся в связанном списке структур в NetBufferLists.

[in] ReceiveFlags

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

NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL

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

NDIS_RECEIVE_FLAGS_RESOURCES

Указывает, что драйвер фильтра освобождает владение структурами NET_BUFFER_LIST и всеми присоединенными NET_BUFFER структурами сразу после вызова NdisFIndicateReceiveNetBufferLists.

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE

Указывает, что все структуры NET_BUFFER_LIST в списке NetBufferLists имеют одинаковый тип протокола (EtherType).

NDIS_RECEIVE_FLAGS_SINGLE_VLAN

Указывает, что все структуры NET_BUFFER_LIST в списке NetBufferLists принадлежат к одной виртуальной локальной сети.

NDIS_RECEIVE_FLAGS_PERFECT_FILTERED

Указывает, что все структуры NET_BUFFER_LIST в списке NetBufferLists включают только данные, соответствующие фильтру пакетов и списку адресов многоадресной рассылки, назначенные мини-адаптеру.

NDIS_RECEIVE_FLAGS_SINGLE_QUEUE

Указывает, что все структуры NET_BUFFER_LIST в списке NetBufferLists принадлежат одной очереди виртуальных машин. Минипорт-драйвер должен задать этот флаг для всех признаков получения в очереди, если флаг NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION был установлен в элементе Flags NDIS_RECEIVE_QUEUE_PARAMETERS структуру при выделении этой очереди.

NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID

Указывает, что все структуры NET_BUFFER_LIST в списке по NetBufferLists содержат допустимые сведения о общей памяти. Если этот флаг установлен на полученном NET_BUFFER_LIST, NDIS обрабатывает общую память как допустимые. Если этот флаг не задан, NDIS и драйверы игнорируют сведения о общей памяти. Например, промежуточные драйверы, изменяющие данные пакета, могут использовать этот флаг для определения необходимости копирования данных. Мини-порты могут использовать флаг, чтобы определить, как освободить память, связанную с очередью виртуальной машины при удалении очереди.

NDIS_RECEIVE_FLAGS_MORE_NBLS

Скрытный.

NDIS_RECEIVE_FLAGS_SWITCH_SINGLE_SOURCE

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

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

Примечание Если каждый пакет в связанном списке структур NET_BUFFER_LIST использует тот же исходный порт, расширение должно задать флаг NDIS_RETURN_FLAGS_SWITCH_SINGLE_SOURCE в параметре ReturnFlags параметра FilterReturnNetBufferLists при завершении запроса на получение. Расширение должно задать этот флаг в параметре ReturnFlags, если он вызывает NdisFReturnNetBufferLists, чтобы возвращать пакеты, которые не были получены или клонировать.
 

NDIS_RECEIVE_FLAGS_SWITCH_DESTINATION_GROUP

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

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

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

Никакой

Замечания

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

Драйверы фильтров могут вызывать NdisFIndicateReceiveNetBufferLists для создания указания получения.

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

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

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

Если драйвер фильтра вызывает функцию NdisFIndicateReceiveNetBufferLists и очищает флаг NDIS_RECEIVE_FLAG_RESOURCES в параметре ReceiveFlags, NDIS возвращает указанные структуры NET_BUFFER_LIST в драйвер фильтра. функция FilterReturnNetBufferLists. В этом случае драйвер фильтра не должен освободить структуры NET_BUFFER_LIST, пока NDIS не возвращает структуры NET_BUFFER_LIST для FilterReturnNetBufferLists.

Если драйвер фильтра вызывает NdisFIndicateReceiveNetBufferLists и задает флаг NDIS_RECEIVE_FLAG_RESOURCES в параметре ReceiveFlags, это означает, что драйвер фильтра должен немедленно восстановить владение структурами NET_BUFFER_LIST. В этом случае NDIS не вызывает функцию драйвера фильтра FilterReturnNetBufferLists для возврата структур NET_BUFFER_LIST. Вместо этого NDIS возвращает NET_BUFFER_LIST структуры драйверу фильтра после возвращения из NdisFIndicateReceiveNetBufferLists. Драйвер фильтра должен восстановить структуры NET_BUFFER_LIST сразу после возврата NdisFIndicateReceiveNetBufferLists. Чтобы восстановить структуры NET_BUFFER_LIST, драйвер фильтра может вызывать собственную функцию FilterReturnNetBufferLists.

Установка флага NDIS_RECEIVE_FLAG_RESOURCES в параметре ReceiveFlags заставляет переопределяющие драйверы копировать сетевые данные и освобождать структуры NET_BUFFER_LIST в драйвер фильтра.

Требования

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

См. также

FilterAttach

FilterReceiveNetBufferLists

FilterReturnNetBufferLists

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

получение данных в драйвере фильтра