Приостановка работы модуля фильтра

Чтобы приостановить выполнение модуля фильтра, NDIS вызывает функцию фильтра FilterPause. Модуль фильтра переходит в состояние приостановки в начале выполнения в функции FilterPause.

NDIS приостанавливает модуль фильтра в рамках операции Plug and Play, чтобы приостановить стек драйверов. Обзор приостановки стека драйверов см. в статье Приостановка работы с стеком драйверов.

От имени модуля фильтра, который находится в состоянии приостановки, драйвер фильтра:

  • Не следует инициировать какие-либо новые индикации приема.

    Дополнительные сведения об операциях отправки и получения см. в Модуль фильтра отправки и получения.

  • Если есть операции приема, которые инициировал драйвер фильтра и которые NDIS не завершил, драйвер фильтра должен ждать, пока NDIS завершит такие операции. Операция приостановки не завершается до тех пор, пока NDIS не вызовет функцию FilterReturnNetBufferLists для всех соответствующих незавершённых указаний получения.

  • Должен немедленно возвращать все необработанные приемные признаки, инициированные базовыми драйверами в NDIS. Операция приостановки не завершается до тех пор, пока драйвер не вызывает функцию NdisFReturnNetBufferLists для таких невыполненных индикаторов приема. Эти выдающиеся индикаторы получения могут возникать, если драйвер ставит в очередь буферы, полученные из базовых драйверов.

  • Должен незамедлительно возвращать новые сигналы получения, указывая, что базовые драйверы инициируются в NDIS, вызывая функцию NdisFReturnNetBufferLists. При необходимости драйвер может скопировать полученные индикаторы и поставить их в очередь, прежде чем вернуть их.

    ПримечаниеNdisFReturnNetBufferLists не следует вызывать для буферных списков сети, указанных с флагом NDIS_RECEIVE_FLAGS_RESOURCES в соответствующем вызове FilterReceiveNetBufferLists. Такие NBLs синхронно возвращаются в NDIS при завершении работы подпрограммы FilterReceiveNetBufferLists.

  • Не следует создавать новые запросы на отправку.

  • Если драйвер фильтра инициировал операции отправки и NDIS их не завершила, драйвер фильтра должен ждать завершения этих операций NDIS. Операция приостановки не завершена, пока NDIS не вызовет функцию FilterSendNetBufferListsComplete для всех таких невыполненных запросов на отправку.

  • Должен немедленно возвращать все новые запросы отправки, сделанные в своей функции FilterSendNetBufferLists, путем вызова функции NdisFSendNetBufferListsComplete. Драйвер фильтра должен задать член статуса в каждой структуре NET_BUFFER_LIST в NDIS_STATUS_PAUSED.

  • Может предоставлять сведения о состоянии с помощью функции NdisFIndicateStatus.

    Дополнительные сведения о признаках состояния см. в разделе Индикаторы состояния модуля фильтра.

  • Необходимо обрабатывать индикации состояния в функции FilterStatus.

  • Должен обрабатывать запросы OID в функции FilterOidRequest.

    Дополнительные сведения о запросах OID модуля фильтрации см. в .

  • Может инициировать запросы OID.

  • Не следует освобождать ресурсы, выделенные драйвером во время операции присоединения.

  • Следует отменять таймеры, если это необходимо для остановки операций отправки и получения.

    Дополнительные сведения о таймерах см. в разделе службы таймеров NDIS 6.0.

После успешного приостановки операций отправки и получения драйвер фильтра должен завершить операцию приостановки. Драйвер фильтра может выполнять операцию приостановки синхронно или асинхронно, возвращая NDIS_STATUS_SUCCESS или NDIS_STATUS_PENDING соответственно из FilterPause.

Если драйвер возвращает NDIS_STATUS_PENDING, он должен вызвать функцию NdisFPauseComplete после завершения операции приостановки.

От имени модуля фильтра, который находится в состоянии Приостановки, драйвер фильтра:

  • Не следует инициировать новые сигналы получения.

  • Должны возвращать новые индикации получения, которые базовые драйверы передаются в NDIS немедленно, вызвав функцию NdisFReturnNetBufferLists. При необходимости драйвер может скопировать полученные индикаторы и поставить их в очередь, прежде чем вернуть их.

  • Не следует создавать новые запросы на отправку.

  • Должен немедленно возвращать все новые запросы отправки, сделанные в своей функции FilterSendNetBufferLists, путем вызова функции NdisFSendNetBufferListsComplete. Драйвер фильтра должен задать член статуса в каждой структуре NET_BUFFER_LIST в NDIS_STATUS_PAUSED.

  • Может предоставлять сведения о состоянии с помощью функции NdisFIndicateStatus.

  • Необходимо обрабатывать индикации состояния в функции FilterStatus.

  • Должен обрабатывать запросы OID в функции FilterOidRequest.

  • Может инициировать запросы OID.

NDIS не инициирует другие операции Plug and Play, такие как подключение, отключение или перезапуск запросов, в то время как драйвер фильтра находится в состоянии приостановки. NDIS может инициировать запросы отсоединения или перезапуска после того, как драйвер фильтра находится в состоянии приостановлено. Дополнительные сведения о том, как отсоединить модуль фильтра, см. в разделе Отключение модуля фильтра. Дополнительные сведения о перезапуске модуля фильтра см. в разделе Запуск модуля фильтра.