Запуск модуля фильтра
Чтобы запустить приостановленный модуль фильтра, NDIS вызывает функцию FilterSetModuleOptions драйвера фильтра , если она имеется, а затем вызов функции FilterRestart . Модуль фильтра переходит в состояние Перезапуск в начале выполнения функции FilterRestart .
Если драйвер предоставил точку входа для FilterSetModuleOptions, драйвер может изменить частичную характеристику модуля фильтра. Дополнительные сведения см. в разделе Режим обхода данных.
При вызове функции FilterRestart драйвера фильтра NDIS передает указатель на структуру NDIS_RESTART_ATTRIBUTES для фильтрации драйвера в элементе RestartAttributesструктуры NDIS_FILTER_RESTART_PARAMETERS . Драйверы фильтров могут изменять атрибуты перезапуска, указанные базовыми драйверами. Дополнительные сведения об изменении атрибутов перезапуска см. в разделе FilterRestart.
Примечание NDIS вызывает FilterSetModuleOptions для всех модулей фильтра в стеке, прежде чем NDIS вызывает функцию FilterRestart для любого модуля фильтра в стеке.
NDIS запускает модуль фильтра в рамках операции Plug and Play для перезапуска стека драйверов. Общие сведения о перезапуске стека драйверов см. в разделе Перезапуск стека драйверов.
От имени модуля фильтра, который находится в состоянии перезапуска , драйвер фильтра:
Завершает все операции, необходимые для перезапуска обычных операций отправки и получения.
Дополнительные сведения об операциях отправки и получения см. в разделе Фильтрация операций отправки и получения модуля.
Может считывать или записывать настраиваемые параметры для модуля фильтра.
Может получать указания сетевых данных. Драйвер может копировать и ставить в очередь такие данные и указывать их на более поздние драйверы или удалять данные.
Не следует инициировать какие-либо новые признаки получения.
Следует немедленно отклонить все новые запросы на отправку, выполненные в функцию FilterSendNetBufferLists , вызвав функцию NdisFSendNetBufferListsComplete . В каждом NET_BUFFER_LIST должно быть задано состояние полного NDIS_STATUS_PAUSED.
Может предоставлять сведения о состоянии с помощью функции NdisFIndicateStatus .
Дополнительные сведения об указаниях состояния см. в разделе Фильтрация индикаторов состояния модуля.
Должен обрабатывать запросы OID в функции FilterOidRequest .
Дополнительные сведения о запросах OID см. в разделе Фильтрация запросов OID модуля.
Не следует инициировать новые запросы на отправку.
Должен немедленно возвращать новые указания получения в NDIS путем вызова функции NdisFReturnNetBufferLists . При необходимости драйвер может скопировать такие признаки получения перед их возвратом.
Может выполнять запросы OID к базовым драйверам для установки или запроса обновленных сведений о конфигурации.
Должен обрабатывать указания состояния в функции FilterStatus .
Должен указывать NDIS_STATUS_SUCCESS или состояние сбоя. Если модуль фильтра не перезапускается, NDIS отсоединит его, а если это обязательный фильтр, NDIS завершает весь стек драйверов.
После того как драйвер фильтра успешно перезапустит операции отправки и получения, он должен завершить операцию перезапуска. Драйвер фильтра может завершить операцию перезапуска синхронно или асинхронно, возвращая NDIS_STATUS_SUCCESS или NDIS_STATUS_PENDING соответственно из FilterRestart.
Если драйвер возвращает NDIS_STATUS_PENDING, он должен вызвать функцию NdisFRestartComplete после завершения операции перезапуска. В этом случае драйвер передает окончательное состояние операции перезапуска в NdisFRestartComplete.
После завершения операции перезапуска модуль фильтра находится в состоянии Выполняется . Драйвер возобновляет обычную обработку отправки и получения.
NDIS не инициирует другие операции Plug and Play, такие как присоединение, отсоединение или приостановка запросов, пока драйвер фильтра находится в состоянии перезапуска. NDIS может инициировать запросы приостановки после того, как драйвер фильтра находится в состоянии Выполняется . Дополнительные сведения о приостановке модуля фильтра см. в разделе Приостановка модуля фильтра.