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

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