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 |
另请参阅
IoGetDriverProxyWrapperFromEndpoint
IoGetDriverProxyExtensionFromDriverObject