функция обратного вызова PTM_RM_NOTIFICATION (wdm.h)

Подпрограмма обратного вызова ResourceManagerNotification resource manager получает и обрабатывает уведомления о транзакциях.

Синтаксис

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

Значение, которое диспетчер ресурсов ранее указал для параметра RMKeyподпрограммы TmEnableCallbacks .

[in] TransactionContext

Значение, которое диспетчер ресурсов ранее указал для параметра EnlistmentKey подпрограммы ZwCreateEnlistment .

[in] TransactionNotification

Одно из значений TRANSACTION_NOTIFY_XXX, определенных в Ktmtypes.h. Это значение указывает тип уведомления о транзакциях, которое KTM отправляет вызывающей объекту.

[in, out] TmVirtualClock

Указатель на расположение, содержащее значение виртуальных часов на момент подготовки уведомления KTM к доставке в диспетчер ресурсов. Если подпрограмма обратного вызова увеличивает это значение перед возвратом, KTM обновляет виртуальные часы до нового значения. (Как правило, диспетчеры ресурсов не изменяют значение виртуальных часов.)

[in] ArgumentLength

Длина (в байтах) буфера, на который указывает параметр Argument . Этот параметр равен нулю, если буфер недоступен.

[in] Argument

Указатель на буфер, содержащий аргументы, относящиеся к уведомлению. Этот параметр имеет значение NULL , если уведомление, указанное параметром TransactionNotification , не требует буфера аргументов.

Список уведомлений, включающих дополнительный буфер аргументов, см. в разделе Примечания TRANSACTION_NOTIFICATION.

Возвращаемое значение

Подпрограмма обратного вызова ResourceManagerNotification должна возвращать STATUS_SUCCESS или другое значение состояния, для которого NT_SUCCESS(status) равно TRUE, если операция выполнена успешно.

Как правило, диспетчер ресурсов возвращает STATUS_SUCCESS, если он обслуживает уведомление синхронно, и STATUS_PENDING если он обслуживает уведомление асинхронно, но он может вернуть STATUS_PENDING в любом случае. Однако диспетчер ресурсов может возвращать STATUS_PENDING только для уведомлений, на которые он отвечает, вызывая одну из подпрограмм TmXxxComplete или ZwXxxComplete .

Иными словами, если диспетчер ресурсов должен ответить на уведомление, вызвав одну из подпрограмм TmXxxComplete или ZwXxxComplete , он может вернуть STATUS_PENDING для уведомления, а затем вызвать соответствующую подпрограмму TmXxxComplete или ZwXxxComplete .

При возникновении ошибки подпрограмма обратного вызова должна возвращать значение состояния, для которого NT_SUCCESS(status) равно FALSE.

Комментарии

Чтобы зарегистрировать подпрограмму обратного вызова ResourceManagerNotification , диспетчер ресурсов должен вызвать TmEnableCallbacks.

Обратите внимание, что подпрограммы обратного вызова ResourceManagerNotification получают указатель вместо дескриптора на объект зачисления. Вы можете передать указатель объекта зачисления в подпрограммы TmXxxx объекта зачисления.

Дополнительные сведения о процедурах обратного вызова ResourceManagerNotification см. в статье Создание Resource Manager.

Подпрограмма обратного вызова 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