Запуск модуля фильтра

Чтобы запустить приостановленный модуль фильтра, 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 может инициировать запросы приостановки после того, как драйвер фильтра находится в состоянии Выполняется . Дополнительные сведения о приостановке модуля фильтра см. в разделе Приостановка модуля фильтра.