DRIVER_PROXY_REGISTER_CALLBACK回调定义在 DriverProxy 终结点注册和热交换作期间在不同阶段调用的例程。
Syntax
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。
要求
| Requirement | 价值 |
|---|---|
| 目标平台 | 普遍 |
| Header | wdm.h |
| IRQL | PASSIVE_LEVEL |
另请参阅
IoRegisterDriverProxyEndpoints
DRIVER_PROXY_REGISTER_CALLBACK_PHASE