Arbeiten mit Transaktionen
Anwendungsautoren können kleinere Quellcodeänderungen vornehmen, um transaktionente Datei- und Registrierungsvorgänge mithilfe des Kerneltransaktions-Managers (KTM) hinzuzufügen. In der Regel umfasst dies das Erstellen einer Transaktion und das Übergeben des Handle an andere Funktionen, die von Transaktionsressourcen bereitgestellt werden, z. B. Transactional NTFS und die Transacted Registry.
KTM bietet Mechanismen für Ihre Anwendung, um an Transaktionen teilzunehmen und Ihren eigenen Transaktionsressourcen-Manager zu schreiben. Es gibt Funktionen, mit denen Sie vier Klassen von Kernelobjekten erstellen, verwalten und mit ihnen arbeiten können: Transaktionen, Transaktions-Manager, Ressourcen-Manager und Eintragslisten. Wenn Sie einfach Transaktionen verwenden, müssen Sie nur mit Transaktionsobjekten arbeiten und diese Funktionen verwenden:
Nehmen Sie niemals an, dass eine Transaktion aktiv ist. Transaktionen können aus vielen Gründen und jederzeit zurückgesetzt werden.
Windows macht eine handle-basierte Schnittstelle für Systemressourcen verfügbar. Um mit einem Betriebssystemobjekt zu arbeiten, fordert die Anwendung zunächst ein Handle für das -Objekt an und verwendet dieses Handle dann in nachfolgenden Funktionsaufrufen, um auf das Objekt zuzugreifen oder es zu ändern. Ein Handle kann in der Regel in verschiedenen Modi geöffnet werden; Der angegebene Modus wirkt sich auf die Semantik nachfolgender Funktionsaufrufe aus. Beispielsweise kann ein Dateihandle, das durch einen Aufruf von CreateFile geöffnet wird, bei dem das Flag dwDesiredAccess auf GENERIC_READ festgelegt ist, nicht in Aufrufen verwendet werden, die die Datei ändern.
Sie können sich mit Benutzermodusressourcen des Distributed Transaction Coordinators wie SQL oder MSMQ und mit Kernelmodusressourcen koordinieren, die die KTM verwenden. Erstellen Sie zunächst eine DTC-Transaktion oder ein System.Transactions-Objekt , und rufen Sie dann das IKernelTransaction-Objekt auf, aus dem Sie das KTM-Handle abrufen können. Das IKernelTransaction-Objekt erstellt eine KTM-Transaktion, die der DTC-Transaktion untergeordnet ist. Mit diesem Handle können Sie Ihre transaktionierten Objekte erstellen, aber das Ergebnis der Transaktion mithilfe von DTC oder System.Transactions signalisieren.