exCreateCallback 函数 (wdm.h)

ExCreateCallback 例程创建一个新的回调对象或代表调用方打开现有的回调对象。

语法

NTSTATUS ExCreateCallback(
  [out] PCALLBACK_OBJECT   *CallbackObject,
  [in]  POBJECT_ATTRIBUTES ObjectAttributes,
  [in]  BOOLEAN            Create,
  [in]  BOOLEAN            AllowMultipleCallbacks
);

参数

[out] CallbackObject

指向位置的指针,该位置接收指向回调对象的指针,该对象是不透明的系统结构。 如果 ExCreateCallback 调用成功,则例程会将新创建或打开的回调对象的地址写入此位置。 从此例程获取的回调对象指针可以作为参数提供给 ExRegisterCallbackExNotifyCallback 例程。

[in] ObjectAttributes

指向包含回调对象的属性 的OBJECT_ATTRIBUTES 结构的指针。 此结构以前由 InitializeObjectAttributes 例程初始化。

[in] Create

是否创建回调对象。 如果无法打开请求的对象,则设置为 TRUE 可创建新的回调对象。 否则,设置为 FALSE

[in] AllowMultipleCallbacks

新创建的回调对象是否应允许多个已注册的回调例程。 设置为 TRUE 以允许多个已注册的回调例程。 否则,设置为 FALSE当 CreateFALSE 或打开现有对象时,将忽略此参数。

返回值

如果打开或创建了回调对象,ExCreateCallback 将返回STATUS_SUCCESS。 否则,它将返回 NTSTATUS 错误代码以指示失败的性质。

注解

驱动程序调用 ExCreateCallback 以创建新的回调对象或打开现有的回调对象。 创建或打开对象后,其他组件可以调用 ExRegisterCallback 例程,以向回调对象注册回调例程。

在调用 ExCreateCallback 之前,驱动程序必须调用 InitializeObjectAttributes 来初始化回调对象的 OBJECT_ATTRIBUTES 结构。 不允许使用未命名的回调对象。 调用方必须指定对象的名称;否则,调用将失败并出现STATUS_UNSUCCESSFUL。 调用方应在回调对象中指定 OBJ_PERMANENT 属性,以防止对象在注册到对象管理器之前删除该对象。 调用方还应指定可能需要的任何其他属性,例如OBJ_CASE_INSENSITIVE。

使用回调对象完成所有操作后,驱动程序必须删除该对象以防止内存泄漏。 有关删除使用 OBJ_PERMANENT 对象属性创建的对象的信息,请参阅 ObDereferenceObject

下表显示了操作系统创建的供驱动程序使用的回调对象。

回调对象名称 使用情况
\Callback\SetSystemTime 每当系统时间更改时,操作系统都调用为此对象注册的任何回调例程。
\Callback\PowerState 每当某些系统电源特征发生更改时,操作系统将调用为此对象注册的任何回调例程。 当驱动程序通过调用 ExRegisterCallback) 注册回调通知 (时,它可以指定应通知它的更改。
 

有关回调对象的详细信息,请参阅 回调对象

要求

要求
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport) IrqlExApcLte2 (wdm) , IrqlExPassive

另请参阅

ExNotifyCallback

ExRegisterCallback

InitializeObjectAttributes

ObDereferenceObject