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。 当 创建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 |