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

参数 指向的缓冲区的长度(以字节为单位)。 如果缓冲区不可用,则此参数为零。

[in] Argument

指向包含通知特定参数的缓冲区的指针。 如果 TransactionNotification 参数指定的通知不需要参数缓冲区,则此参数 NULL

有关包含其他参数缓冲区的通知列表,请参阅 TRANSACTION_NOTIFICATION的“备注”部分。

返回值

ResourceManagerNotification 回调例程必须返回STATUS_SUCCESS或其他状态值(NT_SUCCESS(状态)等于 TRUE(如果作成功)。

通常,如果资源管理器以同步方式为通知提供服务,并且STATUS_PENDING以异步方式为通知提供服务,则资源管理器 STATUS_SUCCESS返回STATUS_PENDING,但无论在哪种情况下,它都可以返回STATUS_PENDING。 但是,资源管理器只能为响应通知返回STATUS_PENDING,方法是调用其中一个 TmXxxCompleteZwXxxComplete 例程。

换句话说,如果资源管理器必须通过调用某个 TmXxxCompleteZwXxxComplete 例程来响应通知, 它可以返回通知的STATUS_PENDING,然后调用相应的 TmXxxCompleteZwXxxComplete 例程。

如果发生错误,回调例程必须返回一个状态值,NT_SUCCESS(status) 等于 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(请参阅“备注”部分)

另请参阅

TRANSACTION_NOTIFICATION

TmEnableCallbacks

ZwCreateEnlistment

ZwGetNotificationResourceManager