функция обратного вызова FILTER_RESTART (ndis.h)
Функция FilterRestart инициирует операцию перезапуска для указанного модуля фильтра.
Синтаксис
FILTER_RESTART FilterRestart;
NDIS_STATUS FilterRestart(
[in] NDIS_HANDLE FilterModuleContext,
[in] PNDIS_FILTER_RESTART_PARAMETERS RestartParameters
)
{...}
Параметры
[in] FilterModuleContext
Дескриптор области контекста для модуля фильтра, который должен перезапустить драйвер фильтра. Драйвер фильтра создал и инициализировал эту область контекста в функции FilterAttach .
[in] RestartParameters
Указатель на NDIS_FILTER_RESTART_PARAMETERS структуры, определяющей параметры перезапуска для модуля фильтра.
Возвращаемое значение
FilterRestart возвращает одно из следующих значений состояния:
Код возврата | Описание |
---|---|
|
FilterRestart успешно перезапустил указанный модуль фильтра. |
|
Драйвер фильтра выполнит запрос асинхронно с помощью вызова функции NdisFRestartComplete после завершения операции перезапуска. |
|
Сбой FilterRestart из-за нехватки ресурсов. |
|
Ни одно из предыдущих значений состояния не применяется. Драйвер фильтра должен вызывать функцию NdisWriteEventLogEntry вместе с параметрами, указывающими причину сбоя. |
Комментарии
FilterRestart — это обязательная функция для драйверов фильтров. NDIS может вызывать FilterRestart , если модуль фильтра находится в состоянии Приостановлено . Модуль фильтра переходит в состояние Перезапуск в начале выполнения FilterRestart.
Когда NDIS вызывает FilterRestart, драйвер фильтра:
- Необходимо завершить операции, необходимые для перезапуска обычных операций отправки и получения.
- При необходимости считывает или записывает параметры конфигурации.
- При необходимости перераспределяет пулы буферов.
- При необходимости изменяет атрибуты перезапуска, указанные в элементе RestartAttributes элемента структура NDIS_FILTER_RESTART_PARAMETERS . Если указатель в RestartAttributes имеет значение NULL, драйвер фильтра не должен изменять или добавлять в список атрибутов перезапуска. Если указатель в RestartAttributes не равен NULL, он указывает на первую структуру NDIS_RESTART_ATTRIBUTES в списке атрибутов перезапуска. Если драйвер фильтра не перезапускается, он не должен изменять атрибуты.
- При необходимости использует запросы OID для запроса или задания сведений в базовых драйверах. Драйверы фильтров не должны выдавать запросы OID на получение сведений, которые уже указаны в списке атрибутов перезапуска.
- Возвращает NDIS_STATUS_SUCCESS или состояние сбоя.
- Не следует изменять атрибуты носителя, если он не распознает OID в элементе Oid структура NDIS_RESTART_ATTRIBUTES .
- Может добавлять новые атрибуты носителя в список атрибутов перезапуска. В этом случае драйвер фильтра должен выделить новую структуру NDIS_RESTART_ATTRIBUTES, например с помощьюФункция NdisAllocateMemoryWithTagPriority — и предоставляет пространство памяти для новых атрибутов. После распространения атрибутов перезапуска на более чем ранее отстающие драйверы NDIS освобождает память атрибутов для драйверов фильтров.
- Может изменять атрибуты носителя в списке атрибутов перезапуска. Если драйверу фильтра требуется больше места в памяти, он может освободить NDIS_RESTART_ATTRIBUTES структуру с помощью функции NdisFreeMemory и выделить новую структуру для хранения измененных сведений. После распространения атрибутов перезапуска на более чем ранее отстающие драйверы NDIS освобождает память атрибутов для драйверов фильтров.
-
Должно, если элемент Oid в структуре NDIS_RESTART_ATTRIBUTES имеет значение OID_GEN_MINIPORT_RESTART_ATTRIBUTES убедитесь, что NDIS_RESTART_GENERAL_ATTRIBUTES структура содержит сведения, необходимые драйверу фильтра. Чтобы убедиться, что структура NDIS_RESTART_GENERAL_ATTRIBUTES содержит необходимые сведения, необходимо проверка элемент Revision в структуре NDIS_OBJECT_HEADER, указанной в элементе Header структуры NDIS_RESTART_GENERAL_ATTRIBUTES.
Примечание Драйвер фильтра может изменять любой элемент в структуре NDIS_RESTART_GENERAL_ATTRIBUTES. Если некоторые атрибуты, которые должен изменить драйвер фильтра, не включены в редакцию структуры, предоставленной NDIS, драйвер фильтра должен полагаться на слишком много драйверов для выдачи запросов OID для отсутствующих атрибутов. Драйвер фильтра может изменять атрибуты по завершении запроса OID.
- Если драйвер фильтра изменяет атрибуты перезапуска, необходимо предоставить функцию FilterOidRequest . Драйвер фильтра должен убедиться, что сведения, получаемые драйверами в атрибутах перезапуска, соответствуют сведениям, которые они получают в ответ на запросы OID.
NDIS вызывает FilterRestart в IRQL = PASSIVE_LEVEL.
Примеры
Чтобы определить функцию FilterRestart , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.Например, чтобы определить функцию FilterRestart с именем MyRestart, используйте тип FILTER_RESTART , как показано в следующем примере кода:
FILTER_RESTART MyRestart;
Затем реализуйте функцию следующим образом:
_Use_decl_annotations_
NDIS_STATUS
MyRestart(
NDIS_HANDLE FilterModuleContext,
PNDIS_FILTER_RESTART_PARAMETERS FilterRestartParameters
)
{...}
Тип функции FILTER_RESTART определен в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, которые применяются к типу функции FILTER_RESTART в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов NDIS.
Сведения о Use_decl_annotations см. в статье Поведение функции с заметками.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается в NDIS 6.0 и более поздних версиях. |
Целевая платформа | Windows |
Header | ndis.h (включая Ndis.h) |
IRQL | PASSIVE_LEVEL |