トランザクションの操作

アプリケーション ライターは、カーネル トランザクション マネージャー (KTM) を使用して、トランザクション ファイルとレジストリ操作を追加するためのマイナー ソース コードの変更を行うことができます。 通常、トランザクションを作成し、トランザクション NTFS や Transacted Registry などのトランザクション リソースによって提供される他の関数にハンドルを渡す必要があります。

KTM は、アプリケーションがトランザクションに参加し、独自のトランザクション リソース マネージャーを作成するためのメカニズムを提供します。 カーネル オブジェクトの 4 つのクラス (トランザクション、トランザクション マネージャー、リソース マネージャー、参加リスト) を作成、管理、および操作できる関数があります。 単にトランザクションを使用している場合は、トランザクション オブジェクトを操作し、次の関数を使用するだけで済みます。

トランザクションがアクティブであると想定しないでください。 トランザクションは、さまざまな理由でいつでもロールバックできます。

Windows は、ハンドルベースのインターフェイスをシステム リソースに公開します。 オペレーティング システム オブジェクトを操作するために、アプリケーションは最初に オブジェクトへのハンドルを要求し、その後の関数呼び出しでこのハンドルを使用してオブジェクトにアクセスまたは変更します。 ハンドルは通常、さまざまなモードで開くことができます。指定されたモードは、後続の関数呼び出しのセマンティクスに影響します。 たとえば、dwDesiredAccess フラグが GENERIC_READ に設定された CreateFile の呼び出しによって開かれるファイル ハンドルは、ファイルを変更する呼び出しでは使用できません。

分散トランザクション コーディネーターのユーザー モード リソース (SQL や MSMQ など) と、KTM を使用するカーネル モード リソースを調整できます。 まず、DTC トランザクションまたは System.Transactions オブジェクトを作成してから、 IKernelTransaction オブジェクトを呼び出して、そこから KTM ハンドルを取得します。 IKernelTransaction オブジェクトは、DTC トランザクションに従属する KTM トランザクションを作成します。 このハンドルを使用すると、トランザクションオブジェクトを作成できますが、DTC または System.Transactions を使用してトランザクションの結果を通知できます。