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

NDIS вызывает функцию MiniportShutdownEx драйвера минипорта при завершении работы системы. Эта функция переводит мини-порт в состояние Завершение работы, где другие обратные вызовы не могут выполняться (включая MiniportHaltEx). Дополнительные сведения о состояниях драйвера miniport см. в разделе Состояния и операции адаптера miniport.

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

Синтаксис

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, драйвер мини-порта не должен освобождать свои ресурсы.

Важно Если MiniportHaltEx вызывает системную ошибку, драйвер мини-порта увидит вложенный вызов MiniportShutdownEx с ShutdownActionNdisShutdownBugCheck. В этом случае MiniportShutdownEx должен вернуться немедленно, не выполняя никаких действий.

 

Примеры

Чтобы определить функцию 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

Состояния и операции адаптера miniport

MiniportInitializeEx

NdisMGetBusData

NdisMRegisterMiniportDriver

NdisMSetBusData