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


Перечисление фильтров на виртуальной очереди (VMQ)

Чтобы получить список всех фильтров, установленных в очереди приема, высокоуровневые драйверы и приложения могут использовать запрос идентификатора объекта метода OID_RECEIVE_FILTER_ENUM_FILTERS (OID).

Элемент InformationBuffer структуры NDIS_OID_REQUEST изначально содержит указатель на структуру NDIS_RECEIVE_FILTER_INFO_ARRAY. При форматировании структуры NDIS_RECEIVE_FILTER_INFO_ARRAY драйвер или приложение должно установить элемент QueueId как идентификатор очереди получения. Идентификатор очереди приёма получается следующим образом:

  • Драйвер верхнего уровня получил значение идентификатора очереди получения из более ранних запросов метода OID OID_RECEIVE_FILTER_ALLOCATE_QUEUE или OID_RECEIVE_FILTER_ENUM_QUEUES. Драйвер также может указать NDIS_DEFAULT_RECEIVE_QUEUE_ID для очереди получения по умолчанию.

  • Приложение получило значение идентификатора очереди получения из предыдущего запроса метода OID OID_RECEIVE_FILTER_ENUM_QUEUES. Приложение также может указать NDIS_DEFAULT_RECEIVE_QUEUE_ID для очереди получения по умолчанию.

После успешного возврата из запроса метода OID OID_RECEIVE_FILTER_ENUM_FILTERSэлемент InformationBuffer в структуре NDIS_OID_REQUEST содержит указатель на обновленную структуру NDIS_RECEIVE_FILTER_INFO_ARRAY, за которой следует одна или несколько структур NDIS_RECEIVE_FILTER_INFO. Каждая структура NDIS_RECEIVE_FILTER_INFO указывает идентификатор фильтра, установленного в указанной очереди получения.

Вышележащие драйверы или приложения могут использовать запрос метода OID_RECEIVE_FILTER_PARAMETERS OID для получения параметров конкретного фильтра в очереди приёма.

Элемент InformationBuffer структуры NDIS_OID_REQUEST изначально содержит указатель на структуру NDIS_RECEIVE_FILTER_PARAMETERS. Переопределяющий драйвер или приложение форматирует структуру NDIS_RECEIVE_FILTER_PARAMETERS, установив член FilterId в ненулевое ID значение фильтра, параметры которого должны быть возвращены.

Примечание Передающий драйвер получил идентификатор фильтра из предыдущего запроса метода OID OID_RECEIVE_FILTER_SET_FILTER или OID_RECEIVE_FILTER_ENUM_FILTERS. Приложение может получить идентификатор фильтра только из предыдущего запроса метода OID, такого как OID_RECEIVE_FILTER_ENUM_FILTERS.

NDIS обрабатывает запросы OID метода OID_RECEIVE_FILTER_ENUM_FILTERS и OID_RECEIVE_FILTER_PARAMETERS для минипорт-драйверов. NDIS получила информацию из внутреннего кэша тех данных, которые были получены в результате запроса OID_RECEIVE_FILTER_SET_FILTER OID.