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

Функция MiniportRestart инициирует запрос на перезапуск приостановленного адаптера мини-порта.

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

Синтаксис

MINIPORT_RESTART MiniportRestart;

NDIS_STATUS MiniportRestart(
  [in] NDIS_HANDLE MiniportAdapterContext,
       PNDIS_MINIPORT_RESTART_PARAMETERS RestartParameters
)
{...}

Параметры

[in] MiniportAdapterContext

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

RestartParameters

Указатель на NDIS_MINIPORT_RESTART_PARAMETERS структуру, которая определяет параметры перезапуска для адаптера минипорта.

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

MiniportRestart возвращает одно из следующих значений состояния:

Код возврата Описание
NDIS_STATUS_SUCCESS

MiniportRestart успешно перезапустил поток сетевых данных через адаптер miniport.

NDIS_STATUS_PENDING
Приложение MiniportRestart не завершило операцию перезапуска, и операция будет выполнена асинхронно. Драйвер мини-порта должен вызвать функцию NdisMRestartComplete после завершения операции.
NDIS_STATUS_RESOURCES

Сбой miniportRestart из-за нехватки ресурсов.

NDIS_STATUS_FAILURE
Ни одно из предыдущих значений состояния не применяется. В этом случае драйвер должен вызвать функцию NdisWriteErrorLogEntry с параметрами, указывающими причину сбоя.

Комментарии

Драйвер указывает точку входа MiniportRestart при вызовеФункция NdisMRegisterMiniportDriver.

Адаптер miniport, заданный параметром MiniportAdapterContext , переходит в состояние Перезапуск при вызове NDIS MiniportRestart.

Когда NDIS вызывает MiniportRestart, драйвер мини-порта:

  • Должен выполнять все задачи, необходимые для возобновления операций отправки и получения.
  • При необходимости изменяет атрибуты перезапуска, указанные в элементе RestartAttributes элемента NDIS_MINIPORT_RESTART_PARAMETERS структура. Если указатель в RestartAttributes имеет значение NULL, драйвер мини-порта не должен изменять или добавлять в список атрибутов перезапуска. Если указатель в RestartAttributes не равен NULL, он указывает на NDIS_RESTART_ATTRIBUTES структуру. Если драйвер мини-порта не перезапускается, он не должен изменять атрибуты.
  • Может предоставлять сведения о состоянии с помощью Функция NdisMIndicateStatusEx .
  • Должен обрабатывать запросы состояния в функции MiniportOidRequest .
Если драйвер минипорта изменяет список атрибутов перезапуска, драйвер минипорта:
  • Может добавлять новые атрибуты носителя в список атрибутов перезапуска. В этом случае драйвер мини-порта должен выделить новый NDIS_RESTART_ATTRIBUTES структуру, например с помощью Функция NdisAllocateMemoryWithTagPriority и предоставление пространства памяти для новых атрибутов. После распространения атрибутов перезапуска на драйверы с превышением NDIS освобождает память атрибутов для драйверов минипорта.
  • Может изменять атрибуты носителя в списке атрибутов перезапуска. Если драйверу мини-порта требуется больше места в памяти, он может освободить структуру NDIS_RESTART_ATTRIBUTES с помощью функции NdisFreeMemory и выделить новую структуру для хранения измененной информации. После распространения атрибутов перезапуска на драйверы с превышением NDIS освобождает память атрибутов для драйверов минипорта.
  • Может изменять любое поле в NDIS_RESTART_GENERAL_ATTRIBUTES структура. Если NDIS предоставляет указатель, отличный от NULL , в элементе RestartAttributes элемента NDIS_MINIPORT_RESTART_PARAMETERS структуре список атрибутов содержит одну запись, в которой элементом Oid в структуре NDIS_RESTART_ATTRIBUTES является OID_GEN_MINIPORT_RESTART_ATTRIBUTES и элемент Data содержит структуру NDIS_RESTART_GENERAL_ATTRIBUTES.
  • Убедитесь, что NDIS_RESTART_GENERAL_ATTRIBUTES структура содержит правильные сведения. Чтобы убедиться, что структура NDIS_RESTART_GENERAL_ATTRIBUTES содержит необходимые сведения, сначала следует определить версию структуры, проверив элемент Revision в структуре NDIS_OBJECT_HEADER , указанной в элементе Header структуры NDIS_RESTART_GENERAL_ATTRIBUTES.
NDIS не инициирует другие операции Plug and Play (PnP) для адаптера мини-порта, такие как остановка, инициализация, изменение питания или запрос на приостановку, до завершения операции перезапуска.

После того как драйвер мини-порта успешно перезапустит операции отправки и получения, он должен завершить операцию перезапуска. Если драйвер возвращает NDIS_STATUS_SUCCESS из MiniportRestart, операция перезапуска завершается. Если драйвер возвращает NDIS_STATUS_PENDING, он может продолжить операции перезапуска. Операция перезапуска завершается после того, как драйвер вызывает функцию NdisMRestartComplete . После завершения операции перезапуска адаптер мини-порта находится в состоянии Выполняется .

Драйвер мини-порта может возобновить работу с указанием полученных пакетов для адаптера мини-порта сразу после вызова NDIS MiniportRestart и до вызова драйвера NdisMRestartComplete. Драйвер мини-порта должен быть готов к приему запросов на отправку после того, как драйвер завершит запрос на перезапуск.

Если драйвер мини-порта не перезапускает операции отправки и получения, драйвер должен вернуть соответствующее состояние сбоя из MiniportRestart. В этом случае драйвер должен остановить все запущенные операции отправки или получения, а затем вернуться в состояние Приостановлено .

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

Примеры

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

Например, чтобы определить функцию MiniportRestart с именем MyRestart, используйте тип MINIPORT_RESTART , как показано в следующем примере кода:

MINIPORT_RESTART MyRestart;

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

_Use_decl_annotations_
NDIS_STATUS
 MyRestart(
    NDIS_HANDLE  MiniportAdapterContext,
    PNDIS_MINIPORT_RESTART_PARAMETERS  RestartParameters
    )
  {...}

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

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

Требования

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

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

MiniportInitializeEx

MiniportOidRequest

MiniportPause

NDIS_MINIPORT_RESTART_PARAMETERS

NDIS_OBJECT_HEADER

NDIS_RESTART_ATTRIBUTES

NDIS_RESTART_GENERAL_ATTRIBUTES NdisAllocateMemoryWithTagPriority

NdisFreeMemory

NdisMIndicateStatusEx

NdisMRegisterMiniportDriver

NdisMRestartComplete

NdisWriteErrorLogEntry

OID_GEN_MINIPORT_RESTART_ATTRIBUTES