Utilisation de routines TmXxx

La plupart des routines KTM utilisent un format de nommage ZwXxx. Ces routines sont basées sur le handle. Autrement dit, au moins un de leurs paramètres d’entrée ou de sortie est un handle pour un objet KTM.

KTM fournit également un plus petit nombre de routines qui utilisent un format de nommage tmxxx. Ces routines sont basées sur des pointeurs. Au moins un de leurs paramètres d’entrée ou de sortie est un pointeur vers un objet KTM.

Certaines routines TmXxx dupliquer des routines ZwXxx . Les autres routines TmXxx n’ont pas d’équivalents ZwXxx .

Dans la plupart des cas, vous devez utiliser les routines ZwXxx . Toutefois, vous devez utiliser des routines TmXxx dans les situations suivantes :

  • Votre gestionnaire de ressources utilise la routine de rappel ResourceManagerNotification , qui fournit un pointeur vers un objet d’inscription au lieu d’un handle.

    Vous pouvez passer le pointeur d’objet d’inscription aux routines TmXxx de l’objet d’inscription.

  • Votre composant de système de traitement transactionnel (TPS) effectue de nombreux appels rapides à KTM, ce qui peut entraîner des performances système trop lentes.

    Dans ce cas, votre composant peut appeler ObReferenceObjectByHandle pour convertir chaque handle d’objet KTM en pointeur, enregistrer le pointeur, puis passer le pointeur aux routines TmXxx . Cette conversion élimine la nécessité pour KTM de convertir chaque handle en pointeur en interne chaque fois qu’une routine ZwXxx est appelée.

    Chaque appel à ObReferenceObectByHandle doit inclure un masque d’accès qui contient les indicateurs définis par KTM appropriés. Ces indicateurs sont décrits dans les pages de référence des routines de création et d’ouverture de KTM.

    Lorsque votre composant a terminé d’utiliser l’objet KTM, il doit déréférencer l’objet en appelant ObDereferenceObjectDeferDelete ou ObDereferenceObject.

    • Vous devez utiliser ObDereferenceObjectDeferDelete si votre composant, ou tout autre composant de votre pile de pilotes, contient des verrous fournis par le système, tels que des verrous de rotation, des objets mutex ou des mutex rapides.

    • Vous pouvez utiliser ObDereferenceObject si vous êtes sûr qu’aucun composant de votre pile de pilotes ne contient de verrous fournis par le système.

    Des interblocages peuvent se produire si votre composant appelle ObDereferenceObject tout en maintenant des verrous, car KTM peut également contenir des verrous pour l’espace de noms de l’objet. En outre, votre composant peut appeler TmGetTransactionId pour obtenir rapidement l’identificateur d’une transaction plus efficacement que l’appel de ZwQueryInformationTransaction.

  • Vous devez disposer d’une fonctionnalité qu’une routine ZwXxx ne fournit pas.

    Plus précisément, un gestionnaire de ressources peut appeler les routines suivantes :