функция обратного вызова FILTER_PAUSE (ndis.h)
NDIS вызывает функцию FilterPause драйвера фильтра, чтобы инициировать операцию приостановки для указанного модуля фильтра.
Синтаксис
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 вместе с параметрами, указывающими причину возникновения ошибок.
Код возврата | Описание |
---|---|
|
FilterPause успешно приостановил указанный модуль фильтра. |
|
Драйвер фильтра выполнит запрос асинхронно с помощью вызова функции NdisFPauseComplete . |
Комментарии
FilterPause — это обязательная функция. NDIS может вызывать FilterPause, если модуль фильтра находится в состоянии Выполняется . Модуль фильтра переходит в состояние Приостановка в начале выполнения функции FilterPause .
Драйвер фильтра выполняет следующие операции, когда NDIS вызывает FilterPause:
- Должен вызыватьФункция NdisFSendNetBufferListsComplete для всех буферов отправки в очереди, созданных драйвером overlying.
- Должен вызыватьФункция NdisFReturnNetBufferLists для всех буферов получения в очереди, созданных базовым драйвером.
- Необходимо дождаться, пока NDIS возвратит все невыполненные запросы на отправку, отправленные драйвером вФункция FilterSendNetBufferListsComplete.
- Необходимо дождаться, пока NDIS возвратит все неоплаченные признаки получения о том, что драйвер поступил в Функция FilterReturnNetBufferLists .
В состояниях Приостановка или Приостановлено драйвер фильтра должен продолжать обрабатывать запросы 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 |