PTM_RM_NOTIFICATION fonction de rappel (wdm.h)
La routine de rappel ResourceManagerNotification d’un gestionnaire de ressources reçoit et gère les notifications de transaction.
Syntaxe
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
)
{...}
Paramètres
[in] EnlistmentObject
Pointeur vers un objet d’inscription. La routine de rappel ResourceManagerNotification reçoit une notification pour l’inscription que cet objet représente.
[in] RMContext
Valeur que le gestionnaire de ressources a précédemment spécifiée pour le paramètre RMKey de la routine TmEnableCallbacks .
[in] TransactionContext
Valeur que le gestionnaire de ressources a précédemment spécifiée pour le paramètre EnlistmentKey de la routine ZwCreateEnlistment .
[in] TransactionNotification
L’une des valeurs TRANSACTION_NOTIFY_XXX définies dans Ktmtypes.h. Cette valeur spécifie le type de notification de transaction que KTM a envoyée à l’appelant.
[in, out] TmVirtualClock
Pointeur vers un emplacement qui contient la valeur d’horloge virtuelle au moment où KTM a préparé la notification pour la remise au gestionnaire de ressources. Si la routine de rappel augmente cette valeur avant son retour, KTM met à jour l’horloge virtuelle vers la nouvelle valeur. (En règle générale, les gestionnaires de ressources ne modifient pas la valeur de l’horloge virtuelle.)
[in] ArgumentLength
Longueur, en octets, de la mémoire tampon vers laquelle pointe le paramètre Argument . Ce paramètre est égal à zéro si une mémoire tampon n’est pas disponible.
[in] Argument
Pointeur vers une mémoire tampon qui contient des arguments spécifiques à la notification. Ce paramètre a la valeur NULL si la notification spécifiée par le paramètre TransactionNotification ne nécessite pas de mémoire tampon d’argument.
Pour obtenir la liste des notifications qui incluent une mémoire tampon d’argument supplémentaire, consultez la section Remarques de TRANSACTION_NOTIFICATION.
Valeur retournée
La routine de rappel ResourceManagerNotification doit retourner STATUS_SUCCESS ou une autre valeur status pour laquelle NT_SUCCESS(status) est égal àTRUE si l’opération réussit.
En règle générale, le gestionnaire de ressources retourne STATUS_SUCCESS s’il assure la maintenance synchrone de la notification et STATUS_PENDING s’il assure la maintenance asynchrone de la notification, mais il peut retourner STATUS_PENDING dans les deux cas. Toutefois, le gestionnaire de ressources peut renvoyer STATUS_PENDING uniquement pour les notifications auxquelles il répond en appelant l’une des routines TmXxxComplete ou ZwXxxComplete .
En d’autres termes, si le gestionnaire de ressources doit répondre à une notification en appelant l’une des routines TmXxxComplete ou ZwXxxComplete , il peut retourner STATUS_PENDING pour la notification et appeler ultérieurement la routine TmXxxComplete ou ZwXxxComplete appropriée.
Si une erreur se produit, la routine de rappel doit retourner une valeur status pour laquelle NT_SUCCESS(status) est FALSE.
Remarques
Pour inscrire une routine de rappel ResourceManagerNotification , votre gestionnaire de ressources doit appeler TmEnableCallbacks.
Notez que les routines de rappel ResourceManagerNotification reçoivent un pointeur, au lieu d’un handle, vers un objet d’inscription. Vous pouvez passer le pointeur de l’objet d’inscription aux routines TmXxx de l’objet d’inscription.
Pour plus d’informations sur les routines de rappel ResourceManagerNotification, consultez Création d’un Resource Manager.
La routine de rappel ResourceManagerNotification est appelée à IRQL = PASSIVE_LEVEL et doit être retournée à IRQL = PASSIVE_LEVEL.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible dans Windows Vista et les versions ultérieures du système d’exploitation. |
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | PASSIVE_LEVEL (voir la section Remarques) |