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

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.

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

None

Remarks

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

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