Uso delle transazioni

Gli autori di applicazioni possono apportare modifiche secondarie al codice sorgente per aggiungere operazioni di file e registro transazioni transazioni tramite Kernel Transaction Manager (KTM). In genere, ciò comporta la creazione di una transazione e il passaggio dell'handle ad altre funzioni fornite dalle risorse transazionali, ad esempio NTFS transazionale e registro Transacted.

KTM fornisce meccanismi per l'applicazione per partecipare alle transazioni, nonché per scrivere il proprio resource manager transazionale. Sono disponibili funzioni che consentono di creare, gestire e usare quattro classi di oggetti kernel: transazioni, gestioni transazioni, gestione risorse e elenchi. Se si usano semplicemente transazioni, è necessario usare solo oggetti transazioni e usare queste funzioni:

Non presupporre che una transazione sia attiva. Le transazioni possono essere rollback per molti motivi e in qualsiasi momento.

Windows espone un'interfaccia basata su handle alle risorse di sistema. Per usare un oggetto sistema operativo, l'applicazione richiede prima un handle all'oggetto e quindi usa questo handle nelle chiamate di funzione successive per accedere o modificare l'oggetto. Un handle può in genere essere aperto in modalità diverse; la modalità specificata influisce sulla semantica delle chiamate di funzione successive. Ad esempio, un handle di file aperto da una chiamata a CreateFile con il flag dwDesiredAccess impostato su GENERIC_READ non può essere usato nelle chiamate che modificano il file.

È possibile coordinare le risorse in modalità utente Distributed Transaction Coordinator , ad esempio SQL o MSMQ e con le risorse in modalità kernel che usano KTM. Prima di tutto, creare una transazione DTC o un oggetto System.Transactions , quindi chiamare l'oggetto IKernelTransaction , da cui è possibile ottenere l'handle KTM. L'oggetto IKernelTransaction crea una transazione KTM subordinata alla transazione DTC. Con questo handle è possibile creare gli oggetti transazionati, ma segnalare il risultato della transazione usando DTC o System.Transactions.