функция обратного вызова FILTER_PAUSE (ndis.h)

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

Примечание Функцию необходимо объявить с помощью типа FILTER_PAUSE . Дополнительные сведения см. в следующем разделе Примеры.
 

Синтаксис

FILTER_PAUSE FilterPause;

NDIS_STATUS FilterPause(
  [in] NDIS_HANDLE FilterModuleContext,
  [in] PNDIS_FILTER_PAUSE_PARAMETERS PauseParameters
)
{...}

Параметры

[in] FilterModuleContext

Дескриптор контекстной области для модуля фильтра, который должен приостановить драйвер фильтра. Драйвер фильтра создал и инициализировал эту область контекста в функции FilterAttach .

[in] PauseParameters

Указатель на NDIS_FILTER_PAUSE_PARAMETERS структуры, определяющей параметры приостановки для модуля фильтра.

Возвращаемое значение

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

Код возврата Описание
NDIS_STATUS_SUCCESS
FilterPause успешно приостановил указанный модуль фильтра.
NDIS_STATUS_PENDING
Драйвер фильтра выполнит запрос асинхронно с помощью вызова функции NdisFPauseComplete .

Комментарии

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

Драйвер фильтра выполняет следующие операции, когда NDIS вызывает FilterPause:

  • Должен вызыватьФункция NdisFSendNetBufferListsComplete для всех буферов отправки в очереди, созданных драйвером overlying.
  • Должен вызыватьФункция NdisFReturnNetBufferLists для всех буферов получения в очереди, созданных базовым драйвером.
  • Необходимо дождаться, пока NDIS возвратит все невыполненные запросы на отправку, отправленные драйвером вФункция FilterSendNetBufferListsComplete.
  • Необходимо дождаться, пока NDIS возвратит все неоплаченные признаки получения о том, что драйвер поступил в Функция FilterReturnNetBufferLists .
После того как драйвер фильтра возвращает NDIS_STATUS_SUCCESS из FilterPause или вызывает функцию NdisFPauseComplete , операция приостановки завершается. Модуль фильтра находится в состоянии Приостановлено .

В состояниях Приостановка или Приостановлено драйвер фильтра должен продолжать обрабатывать запросы OID или указания состояния. Драйвер должен отклонять вызовы к его Функция FilterSendNetBufferLists . Драйвер может передавать вызовы в свой Функция FilterReceiveNetBufferLists . Однако драйвер не может передавать созданные им буферы. Драйвер не должен быть источником каких-либо указаний на получение или отправку запросов.

В состоянии Приостановлено модуль фильтра не должен создавать запросы на отправку или получать указания.

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

NDIS вызывает FilterPause в IRQL = PASSIVE_LEVEL.

Примеры

Чтобы определить функцию FilterPause , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить функцию FilterPause с именем MyPause, используйте тип FILTER_PAUSE , как показано в этом примере кода:

FILTER_PAUSE MyPause;

Затем реализуйте функцию следующим образом:

_Use_decl_annotations_
NDIS_STATUS
 MyPause(
    NDIS_HANDLE  FilterModuleContext,
    PNDIS_FILTER_PAUSE_PARAMETERS  FilterPauseParameters
    )
  {...}

Тип функции FILTER_PAUSE определен в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует, что будут использоваться заметки, применяемые к типу функции FILTER_PAUSE в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе Объявление функций с помощью типов ролей функций для драйверов NDIS.

Сведения о Use_decl_annotations см. в статье О поведении функции.

Требования

Требование Значение
Минимальная версия клиента Поддерживается в NDIS 6.0 и более поздних версиях.
Целевая платформа Windows
Header ndis.h (включая Ndis.h)
IRQL PASSIVE_LEVEL

См. также раздел

FilterAttach

FilterReceiveNetBufferLists

FilterRestart

FilterReturnNetBufferLists

FilterSendNetBufferLists

FilterSendNetBufferListsComplete

NDIS_FILTER_PAUSE_PARAMETERS

NDIS_OBJECT_HEADER

NdisFPauseComplete

NdisFReturnNetBufferLists

NdisFSendNetBufferListsComplete

NdisWriteEventLogEntry