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


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

Платформа PacketDirect (PD) вызывает функцию NdisPDSetReceiveFilter драйвера минипорта с поддержкой PD, чтобы направлять определенные потоки пакетов в определенную очередь получения PD.

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

 

Синтаксис

NDIS_PD_SET_RECEIVE_FILTER NdisPdSetReceiveFilter;

NTSTATUS() NdisPdSetReceiveFilter(
  [in]  NDIS_PD_PROVIDER_HANDLE ProviderHandle,
  [in]  const NDIS_PD_FILTER_PARAMETERS *FilterParameters,
  [out] NDIS_PD_FILTER_HANDLE *FilterHandle
)
{...}

Параметры

[in] ProviderHandle

Дескриптор поставщика, который идентифицирует объект поставщика драйвера мини-порта с поддержкой PD.

[in] FilterParameters

Параметры, определяющие все необходимые сведения для фильтра. Дополнительные сведения см. в разделе структура NDIS_PD_FILTER_PARAMETERS .

[out] FilterHandle

Дескриптор фильтра.

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

Эта функция возвращает STATUS_SUCCESS после успешного завершения, в противном случае возвращает соответствующий код ошибки.

Комментарии

Фильтры PD применяются до любого распространения, поэтому пакет, соответствующий фильтру PD, можно поместить в выделенную очередь PD, а остальные пакеты могут распространяться ПО RSS, как обычно. Клиент PD отвечает за сантехнику неперекрывающихся неоднозначных фильтров. Однако некоторые ПД могут допускать перекрывание неоднозначных фильтров при условии, что клиент PD может передать значение приоритета, указывающее, какой фильтр необходимо применить в первую очередь. Поставщик PD может не выполнять запросы на набор фильтров с STATUS_NOT_SUPPORTED, если клиент пытается задать фильтры с конфликтующими профилями или перекрывающимися условиями соответствия. Структура NDIS_PD_CAPABILITIES не позволяет поставщику объявлять все допустимые сочетания профилей, которые клиент PD может использовать одновременно. Именно поэтому некоторые возможности обнаруживаются клиентом PD во время выполнения, когда поставщик PD завершает запрос на набор фильтров с STATUS_NOT_SUPPORTED

Примеры

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

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

NDIS_PD_SET_RECEIVE_FILTER MyPDSetReceiveFilter;

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

_Use_decl_annotations_
VOID
 MyPDSetReceiveFilter(
    NDIS_PD_PROVIDER_HANDLE  ProviderHandle,
    CONST NDIS_PD_FILTER_PARAMETERS*  FilterParameters,
    NDIS_PD_FILTER_HANDLE*  FilterHandle
    )
  {...}

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

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

Требования

Требование Значение
Минимальная версия клиента Windows 10
Минимальная версия сервера Windows Server 2016
Целевая платформа Windows
Header ndis.h
IRQL PASSIVE_LEVEL