Поделиться через


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

Обратный вызов DRIVER_PROXY_REGISTER_CALLBACK определяет подпрограмму, которая вызывается на разных этапах во время регистрации конечной точки DriverProxy и операций горячего переключения.

Синтаксис

DRIVER_PROXY_REGISTER_CALLBACK DriverProxyRegisterCallback;

NTSTATUS DriverProxyRegisterCallback(
  DRIVER_PROXY_REGISTER_CALLBACK_PHASE Phase,
  PVOID Context
)
{...}

Параметры

Phase

[in] Значение DRIVER_PROXY_REGISTER_CALLBACK_PHASE , указывающее, какой этап процесса регистрации выполняется в настоящее время.

Context

[in, необязательный] Указатель на определяемые драйвером сведения о контексте, переданные в IoRegisterDriverProxyEndpoints. Этот параметр может иметь значение NULL, если контекст не указан.

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

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

Код возврата Description
STATUS_SUCCESS Обратный вызов выполнен успешно. Процесс регистрации конечной точки продолжится на следующем этапе.
Другие значения NTSTATUS Обратный вызов столкнулся с ошибкой. Вся операция регистрации конечных точек завершится ошибкой, и все частичные изменения будут откатированы.

Замечания

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

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

Обратный вызов вызывается в определенной последовательности во время регистрации конечной точки:

  1. Этап предварительной обработки: вызывается до начала переключения функций конечной точки. Драйверы могут использовать этот этап для подготовки к предстоящему изменению, например:

    • Получение блокировок для конкретного драйвера
    • Сохранение текущего состояния
    • Уведомление о других компонентах драйвера
    • Подготовка ресурсов, необходимых во время переключения
  2. Этап остановленного прокси-сервера: вызывается во время блокировки всех вызовов зарегистрированных конечных точек. На этом этапе система DriverProxy держит блокировку запуска и новые вызовы функций конечной точки не будут продолжаться. Это самое безопасное время для выполнения операций, требующих эксклюзивного доступа к ресурсам, к которым можно получить доступ с помощью функций конечных точек, таких как:

    • Обновление общих структур данных
    • Перенастройка оборудования
    • Изменение состояния глобального драйвера
  3. Этап после обработки: вызывается после завершения переключения функций конечной точки и возобновления нормальной работы. Драйверы могут использовать этот этап для операций очистки, таких как:

    • Освобождение блокировок для конкретного драйвера
    • Обновление внутреннего состояния
    • Уведомление о других компонентах завершения
    • Ведение журнала или отслеживание производительности

Обратный вызов должен возвращать STATUS_SUCCESS для продолжения регистрации. Любой сбой приведет к сбою всей операции и откату.

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

Обратный вызов не должен выполнять операции, которые могут вернуться в то же расширение DriverProxy, так как это может привести к взаимоблокировкам.

Обратный вызов является необязательным и может иметь значение NULL, если во время регистрации конечной точки не требуется координация для конкретного драйвера.

Требования

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

См. также

IoRegisterDriverProxyEndpoints

DRIVER_PROXY_REGISTER_CALLBACK_PHASE

DRIVER_PROXY_ENDPOINT_INFORMATION

IoCreateDriverProxyExtension