PTM_RM_NOTIFICATION回调函数 (wdm.h)
资源管理器的 ResourceManagerNotification 回调例程接收并处理 事务通知。
语法
PTM_RM_NOTIFICATION PtmRmNotification;
NTSTATUS PtmRmNotification(
[in] PKENLISTMENT EnlistmentObject,
[in] PVOID RMContext,
[in] PVOID TransactionContext,
[in] ULONG TransactionNotification,
[in, out] PLARGE_INTEGER TmVirtualClock,
[in] ULONG ArgumentLength,
[in] PVOID Argument
)
{...}
参数
[in] EnlistmentObject
指向 登记对象的指针。 ResourceManagerNotification 回调例程接收此对象表示的登记的通知。
[in] RMContext
资源管理器之前为 TmEnableCallbacks 例程的 RMKey 参数指定的值。
[in] TransactionContext
资源管理器之前为 ZwCreateEnlistment 例程的 EnlistmentKey 参数指定的值。
[in] TransactionNotification
Ktmtypes.h 中定义的TRANSACTION_NOTIFY_XXX 值之一。 此值指定 KTM 发送给调用方的交易通知的类型。
[in, out] TmVirtualClock
指向一个位置的指针,该位置包含 KTM 准备要传递到资源管理器的通知时 虚拟时钟值 。 如果回调例程在返回之前增加此值,KTM 会将虚拟时钟更新为新值。 (通常,资源管理器不会修改虚拟时钟值。)
[in] ArgumentLength
Argument 参数指向的缓冲区的长度(以字节为单位)。 如果缓冲区不可用,则此参数为零。
[in] Argument
指向包含通知特定参数的缓冲区的指针。 如果 TransactionNotification 参数指定的通知不需要参数缓冲区,则此参数为 NULL。
有关包含附加参数缓冲区的通知列表,请参阅 TRANSACTION_NOTIFICATION的“备注”部分。
返回值
如果操作成功,ResourceManagerNotification 回调例程必须返回STATUS_SUCCESS或其他状态值,NT_SUCCESS (状态) 等于 TRUE。
通常,如果资源管理器以同步方式为通知提供服务,则返回STATUS_SUCCESS;如果以异步方式为通知提供服务,则STATUS_PENDING返回,但在任一情况下,它都可以返回STATUS_PENDING。 但是,资源管理器只能为通过调用 TmXxxComplete 或 Zw Xxx Complete 例程之一响应的通知返回STATUS_PENDING。
换句话说,如果资源管理器必须通过调用 TmXxxComplete 或 ZwXxxComplete 例程之一来响应通知,它可以返回通知的STATUS_PENDING,并在以后调用相应的 TmXxxComplete 或 ZwXxxComplete 例程。
如果发生错误,回调例程必须返回状态值,NT_SUCCESS (状态) 等于 FALSE。
注解
若要注册 ResourceManagerNotification 回调例程,资源管理器必须调用 TmEnableCallbacks。
请注意, ResourceManagerNotification 回调例程接收指向登记对象的指针,而不是句柄。 可以将登记对象指针传递给登记对象的 TmXxx 例程。
有关 ResourceManagerNotification 回调例程的详细信息,请参阅创建资源管理器。
ResourceManagerNotification 回调例程在 IRQL = PASSIVE_LEVEL 调用,并且必须在 IRQL = PASSIVE_LEVEL 返回。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 Windows Vista 和更高版本的操作系统版本中可用。 |
目标平台 | 桌面 |
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
IRQL | PASSIVE_LEVEL (请参阅“备注”部分) |