Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обратный вызов 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 во время критических этапов процесса горячего переключения.
Обратный вызов вызывается в определенной последовательности во время регистрации конечной точки:
Этап предварительной обработки: вызывается до начала переключения функций конечной точки. Драйверы могут использовать этот этап для подготовки к предстоящему изменению, например:
- Получение блокировок для конкретного драйвера
- Сохранение текущего состояния
- Уведомление о других компонентах драйвера
- Подготовка ресурсов, необходимых во время переключения
Этап остановленного прокси-сервера: вызывается во время блокировки всех вызовов зарегистрированных конечных точек. На этом этапе система DriverProxy держит блокировку запуска и новые вызовы функций конечной точки не будут продолжаться. Это самое безопасное время для выполнения операций, требующих эксклюзивного доступа к ресурсам, к которым можно получить доступ с помощью функций конечных точек, таких как:
- Обновление общих структур данных
- Перенастройка оборудования
- Изменение состояния глобального драйвера
Этап после обработки: вызывается после завершения переключения функций конечной точки и возобновления нормальной работы. Драйверы могут использовать этот этап для операций очистки, таких как:
- Освобождение блокировок для конкретного драйвера
- Обновление внутреннего состояния
- Уведомление о других компонентах завершения
- Ведение журнала или отслеживание производительности
Обратный вызов должен возвращать STATUS_SUCCESS для продолжения регистрации. Любой сбой приведет к сбою всей операции и откату.
Во время этапа DriverProxyRegisterCallbackProxyStalled все вызовы конечных точек блокируются, поэтому обратный вызов должен выполнять операции быстро, чтобы минимизировать нарушение системы.
Обратный вызов не должен выполнять операции, которые могут вернуться в то же расширение DriverProxy, так как это может привести к взаимоблокировкам.
Обратный вызов является необязательным и может иметь значение NULL, если во время регистрации конечной точки не требуется координация для конкретного драйвера.
Требования
| Требование | Ценность |
|---|---|
| целевая платформа | Всеобщий |
| Header | wdm.h |
| IRQL | PASSIVE_LEVEL |
См. также
IoRegisterDriverProxyEndpoints
DRIVER_PROXY_REGISTER_CALLBACK_PHASE