Функция 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 Расширяемый коммутатор отправки и получения флагов.
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) |