Перечисление фильтров на виртуальной очереди (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.