IoCreateDriverProxyExtension 函数 (wdm.h)

IoCreateDriverProxyExtension 函数分配并初始化启用了热交换驱动程序功能的 DriverProxy 扩展。

Syntax

NTSTATUS IoCreateDriverProxyExtension(
  PDRIVER_OBJECT                        OwningDriverObject,
  DRIVER_PROXY_EXTENSION_CREATION_FLAGS Flags,
  PDRIVER_PROXY_EXTENSION               *DriverProxyExtension
);

参数

OwningDriverObject

[in,可选]指向将拥有 DriverProxy 扩展 的DRIVER_OBJECT 的可选指针。 如果提供,该扩展将与此驱动程序对象相关联。 如果为 NULL,则无需拥有驱动程序即可创建扩展。

Flags

[in]提供用于创建扩展的其他配置选项 的DRIVER_PROXY_EXTENSION_CREATION_FLAGS 值。 目前未定义任何标志,因此此参数应设置为 0。

DriverProxyExtension

[out]指向接收指向新创建的 DriverProxy 扩展的指针的变量的指针。 此扩展可以与其他 DriverProxy API 一起使用。

返回值

IoCreateDriverProxyExtension 返回以下 NTSTATUS 值之一:

返回代码 Description
STATUS_SUCCESS 扩展已成功分配和初始化。
STATUS_NOT_SUPPORTED 当前系统不支持 DriverProxy 扩展。
STATUS_DRIVER_BLOCKED 指定的驱动程序通过注册表设置从 DriverProxy作中排除。
STATUS_INSUFFICIENT_RESOURCES 内存不足,无法分配扩展。
STATUS_RESOURCE_IN_USE 指定的驱动程序对象已拥有 DriverProxy 扩展。

注解

任何想要使用驱动程序 Hot-Swap 功能的驱动程序都需要 DriverProxy 扩展。 该扩展充当一个不透明的令牌,用于保存所有相关 DriverProxy 信息并启用可热交换作。

使用 Driver Hot-Swap 的驱动程序应在 DriverEntry 期间创建 DriverProxy 扩展,最好是在函数的早期。 建议将结果存储在全局变量中,以便在整个驱动程序的整个生存期内轻松访问。

在调用 IoCreateDriverProxyExtension 之前,驱动程序应调用 IoGetDriverProxyFeatures 来验证 DriverProxy 功能是否可用并已启用。

每个驱动程序对象最多可以拥有一个 DriverProxy 扩展。 如果驱动程序对象已有关联的扩展,该函数将返回 STATUS_RESOURCE_IN_USE

在 Driver Hot-Swap V2 中,成功创建扩展后,终结点包装器将自动可用,而无需显式注册调用。 编译器和链接器会在生成过程中自动生成终结点信息。

系统会自动管理 DriverProxy 扩展的生命周期。 卸载拥有驱动程序对象时,会自动清理扩展。

要求

Requirement 价值
目标平台 普遍
Header wdm.h
Library NtosKrnl.lib
IRQL PASSIVE_LEVEL

另请参阅

IoGetDriverProxyFeatures

IoGetDriverProxyWrapperFromEndpoint

IoGetDriverProxyExtensionFromDriverObject

DRIVER_PROXY_EXTENSION_CREATION_FLAGS

DRIVER_OBJECT