exCreateCallback 函数 (wdm.h)
ExCreateCallback 例程创建一个新的回调对象或代表调用方打开现有的回调对象。
语法
NTSTATUS ExCreateCallback(
[out] PCALLBACK_OBJECT *CallbackObject,
[in] POBJECT_ATTRIBUTES ObjectAttributes,
[in] BOOLEAN Create,
[in] BOOLEAN AllowMultipleCallbacks
);
参数
[out] CallbackObject
指向位置的指针,该位置接收指向回调对象的指针,该对象是不透明的系统结构。 如果 ExCreateCallback 调用成功,则例程会将新创建或打开的回调对象的地址写入此位置。 从此例程获取的回调对象指针可以作为参数提供给 ExRegisterCallback 或 ExNotifyCallback 例程。
[in] ObjectAttributes
指向包含回调对象的属性 的OBJECT_ATTRIBUTES 结构的指针。 此结构以前由 InitializeObjectAttributes 例程初始化。
[in] Create
是否创建回调对象。 如果无法打开请求的对象,则设置为 TRUE 可创建新的回调对象。 否则,设置为 FALSE。
[in] AllowMultipleCallbacks
新创建的回调对象是否应允许多个已注册的回调例程。 设置为 TRUE 以允许多个已注册的回调例程。 否则,设置为 FALSE。 当 Create 为 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) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDDI (storport) , IrqlExApcLte2 (wdm) , IrqlExPassive |