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。 当 创建FALSE 或打开现有对象时,将忽略此参数。

返回值

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)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
DDI 符合性规则 HwStorPortProhibitedDIS(storport)IrqlExApcLte2(wdm)、IrqlExPassive

另请参阅

ExNotifyCallback

ExRegisterCallback

InitializeObjectAttributes

ObDereferenceObject