Utilisation des transactions
Les rédacteurs d’applications peuvent apporter des modifications mineures au code source pour ajouter des opérations de fichier et de Registre traitées à l’aide du Gestionnaire de transactions de noyau (KTM). En règle générale, cela implique la création d’une transaction et le passage du handle à d’autres fonctions fournies par des ressources transactionnelles telles que NTFS transactionnel et le Registre traité.
KTM fournit des mécanismes permettant à votre application de participer aux transactions et d’écrire votre propre gestionnaire de ressources transactionnelles. Il existe des fonctions qui vous permettent de créer, de gérer et d’utiliser quatre classes d’objets de noyau : les transactions, les gestionnaires de transactions, les gestionnaires de ressources et les inscriptions. Si vous utilisez simplement des transactions, il vous suffit d’utiliser les objets de transaction et d’utiliser ces fonctions :
Ne supposez jamais qu’une transaction est active. Les transactions peuvent être annulées pour de nombreuses raisons et à tout moment.
Windows expose une interface basée sur un handle aux ressources système. Pour utiliser un objet de système d’exploitation, l’application demande d’abord un handle à l’objet, puis utilise ce handle dans les appels de fonction suivants pour accéder à l’objet ou le modifier. Un handle peut généralement être ouvert dans différents modes ; le mode spécifié affecte la sémantique des appels de fonction suivants. Par exemple, un handle de fichier ouvert par un appel à CreateFile avec l’indicateur dwDesiredAccess défini sur GENERIC_READ ne peut pas être utilisé dans les appels qui modifient le fichier.
Vous pouvez coordonner avec des ressources en mode utilisateur distributed Transaction Coordinator telles que SQL ou MSMQ, ainsi qu’avec des ressources en mode noyau qui utilisent KTM. Tout d’abord, créez une transaction DTC ou un objet System.Transactions , puis appelez l’objet IKernelTransaction , à partir duquel vous pouvez obtenir le handle KTM. L’objet IKernelTransaction crée une transaction KTM subordonnée à la transaction DTC. Avec ce handle, vous pouvez créer vos objets traités, mais signaler le résultat de la transaction à l’aide de DTC ou de System.Transactions.