функция обратного вызова MINIPORT_SHUTDOWN (ndis.h)
NDIS вызывает функцию MiniportShutdownEx драйвера минипорта при завершении работы системы. Эта функция переводит мини-порт в состояние Завершение работы, где другие обратные вызовы не могут выполняться (включая MiniportHaltEx). Дополнительные сведения о состояниях драйвера miniport см. в разделе Состояния и операции адаптера miniport.
Синтаксис
MINIPORT_SHUTDOWN MiniportShutdown;
void MiniportShutdown(
[in] NDIS_HANDLE MiniportAdapterContext,
[in] NDIS_SHUTDOWN_ACTION ShutdownAction
)
{...}
Параметры
[in] MiniportAdapterContext
Дескриптор контекстной области, выделенной драйвером мини-порта в функции MiniportInitializeEx . Драйвер использует эту область контекста для хранения сведений о состоянии адаптера мини-порта.
[in] ShutdownAction
Причина, по которой NDIS вызвал функцию завершения работы. Допустимы следующие значения.
NdisShutdownPowerOff
Указывает, что NDIS называется MiniportShutdownEx , так как система завершает работу.
NdisShutdownBugCheck
Указывает, что NDIS называется MiniportShutdownEx из-за системной ошибки.
Возвращаемое значение
None
Remarks
Драйвер указывает точку входа MiniportShutdownEx при вызовеФункция NdisMRegisterMiniportDriver.
MiniportShutdownEx восстанавливает адаптер минипорта в известное начальное состояние (состояние до NDIS, вызываемого функцией MiniportInitializeEx драйвера минипорта для адаптера минипорта). Это гарантирует, что адаптер минипорта находится в известном состоянии и готов к повторной инициализации при перезагрузке компьютера после завершения работы системы по любой причине, включая неустранимую системную ошибку.
MiniportShutdownEx может считывать и записывать данные в порты ввода-вывода, пространство ввода-вывода устройства, сопоставленное в памяти, или пространство конфигурации шины, вызывая функцию NdisMGetBusData или NdisMSetBusData для отключения подсистемы DMA, отключения прерываний или сброса оборудования до известного состояния, чтобы оборудование можно было безопасно перезапустить.
Если NDIS вызывает MiniportShutdownEx из-за неустранимой ошибки, параметр ShutdownAction имеет значение NdisShutdownBugCheck , а MiniportShutdownEx работает на высоком уровне IRQL. В этом случае драйвер мини-порта не должен вызывать какие-либо функции NdisXxx , за исключением функций, которые могут вызываться в любой IRQL.
Если NDIS вызывает MiniportShutdownEx из-за инициированного пользователем завершения работы, MiniportShutdownEx выполняется в IRQL = PASSIVE_LEVEL и драйвер минипорта может вызывать другие функции NdisXxx .
Если NDIS вызывает MiniportShutdownEx из-за неустранимой ошибки, параметр ShutdownAction имеет значение NdisShutdownBugCheck , а MiniportShutdownEx работает на высоком уровне IRQL. В этом случае драйвер мини-порта не должен вызывать какие-либо функции NdisXxx , за исключением функций, которые могут вызываться в любой IRQL. Начиная с минипортов NDIS 6.30, NDIS не вызывает MiniportShutdownEx во время проверки ошибки, если мини-порт не предоставляет флаг NDIS_MINIPORT_ATTRIBUTES_REGISTER_BUGCHECK_CALLBACK в атрибутах регистрации адаптера.
Если параметр ShutdownAction имеет значение NdisShutdownPowerOff, драйвер мини-порта может при необходимости освободить свои ресурсы. Однако это не является ни обязательным, ни рекомендуется, так как завершение работы системы делает его ненужным.
Если параметр ShutdownAction имеет значение NdisShutdownBugCheck, драйвер мини-порта не должен освобождать свои ресурсы.
Примеры
Чтобы определить функцию MiniportShutdownEx , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.Например, чтобы определить функцию MiniportShutdownEx с именем MyShutdownEx, используйте тип MINIPORT_SHUTDOWN , как показано в этом примере кода:
MINIPORT_SHUTDOWN MyShutdownEx;
Затем реализуйте функцию следующим образом:
_Use_decl_annotations_
VOID
MyShutdownEx(
NDIS_HANDLE MiniportAdapterContext,
NDIS_SHUTDOWN_ACTION ShutdownAction
)
{...}
Тип функции MINIPORT_SHUTDOWN определяется в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, которые применяются к типу функции MINIPORT_SHUTDOWN в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе Объявление функций с помощью типов ролей функций для драйверов NDIS.
Сведения о Use_decl_annotations см. в статье О поведении функции.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается в NDIS 6.0 и более поздних версиях. |
Целевая платформа | Windows |
Header | ndis.h (включая Ndis.h) |
IRQL | См. раздел "Примечания" |
См. также раздел
Состояния адаптера драйвера miniport
Завершение работы адаптера miniport