Функция IoRegisterDriverProxyEndpoints (wdm.h)

Замечание

Эта функция используется только для драйвера Hot-Swap версии 1. Новые драйверы должны использовать Driver Hot-Swap версии 2, которая автоматически обрабатывает регистрацию конечных точек через перечисление конечных точек на основе компилятора.

Функция IoRegisterDriverProxyEndpoints регистрирует функции конечных точек в расширение DriverProxy, что позволяет использовать функции драйвера с горячей заменой в реализациях Driver Hot-Swap версии 1.

Синтаксис

NTSTATUS IoRegisterDriverProxyEndpoints(
  PDRIVER_PROXY_EXTENSION            DriverProxyExtension,
  PDRIVER_PROXY_ENDPOINT_INFORMATION EndpointInfo,
  ULONG                              Count,
  PDRIVER_PROXY_REGISTER_CALLBACK    PhasedCallback,
  PVOID                              Context
);

Параметры

DriverProxyExtension

[in] Указатель на расширение DriverProxy, в которое будут зарегистрированы конечные точки. Это расширение должно быть создано с помощью IoCreateDriverProxyExtension.

EndpointInfo

[in, out] Массив структур DRIVER_PROXY_ENDPOINT_INFORMATION , описывающих функции конечной точки для регистрации. Функция может изменить содержимое этого массива во время регистрации.

Count

[in] Количество элементов в массиве EndpointInfo .

PhasedCallback

[in, необязательный] Необязательный указатель на функцию DRIVER_PROXY_REGISTER_CALLBACK , которая будет вызываться на различных этапах процесса регистрации, чтобы разрешить операции, связанные с драйвером.

Context

[in, необязательный] Необязательный указатель контекста, который будет передан функции PhasedCallback .

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

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

Код возврата Description
STATUS_SUCCESS Конечные точки успешно зарегистрированы.
STATUS_INSUFFICIENT_RESOURCES Недостаточно памяти для регистрации конечных точек.
STATUS_INVALID_PARAMETER_3 Одна или несколько структур сведений о конечной точке пытались перезаписать существующую функцию с другим числом параметров.
STATUS_UNSUCCESSFUL Время ожидания завершения операции при ожидании завершения существующих вызовов функций.

Замечания

Эта функция устанавливает сопоставление между исходными функциями драйвера и их оболочками с возможностью горячего переключения. После регистрации вызовы исходных функций будут перенаправлены через систему DriverProxy, что позволяет заменить функции во время выполнения без выгрузки драйвера.

Эта функция выполняет сложную многофазную операцию для безопасной замены указателей функций во время выполнения существующих вызовов. Процесс регистрации включает:

  • Этап предварительной обработки: необязательный этап PhasedCallback вызывается с помощью DriverProxyRegisterCallbackPreProcess , чтобы разрешить подготовку драйверов.

  • Приобретение rundown: функция ожидает завершения всех существующих вызовов зарегистрированных конечных точек, прежде чем продолжить.

  • Этап остановленного прокси-сервера: PhasedCallback вызывается с DriverProxyRegisterCallbackProxyStalled во время блокировки всех вызовов.

  • Замена функции: фактические указатели функции обновляются атомарно.

  • Этап после обработки. Этап phasedCallback вызывается с помощью DriverProxyRegisterCallbackPostProcess , чтобы разрешить очистку драйвера.

Если конечная точка имеет тот же идентификатор, что и существующую зарегистрированную конечную точку, конечная точка будет заменена, но только если она имеет то же число параметров.

Эта функция служит двумя целями в Driver Hot-Swap версии 1: начальная регистрация конечных точек (где PhasedCallback должна иметь значение NULL) и переключение конечных точек во время операций горячего переключения.

Функция должна вызываться в PASSIVE_LEVEL, так как может потребоваться дождаться завершения существующих вызовов функций.

Требования

Требование Ценность
целевая платформа Всеобщий
Header wdm.h
Library NtosKrnl.lib
IRQL PASSIVE_LEVEL

См. также

IoCreateDriverProxyExtension

DRIVER_PROXY_ENDPOINT_INFORMATION

DRIVER_PROXY_REGISTER_CALLBACK

IoGetDriverProxyWrapperFromEndpoint