функция обратного вызова 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 (см. раздел "Примечания") |