Trabajar con transacciones

Los escritores de aplicaciones pueden realizar cambios menores en el código fuente para agregar operaciones de registro y archivo transaccionales mediante el Administrador de transacciones de kernel (KTM). Normalmente, esto implicará crear una transacción y pasar el identificador a otras funciones proporcionadas por recursos transaccionales, como NTFS transaccional y el Registro de Transacted.

KTM proporciona mecanismos para que la aplicación participe en transacciones, así como para escribir su propio administrador de recursos transaccionales. Hay funciones que permiten crear, administrar y trabajar con cuatro clases de objetos kernel: transacciones, administradores de transacciones, administradores de recursos y inscripciones. Si simplemente usa transacciones, solo tiene que trabajar con objetos de transacción y usar estas funciones:

Nunca supongamos que una transacción está activa. Las transacciones se pueden revertir por muchas razones y en cualquier momento.

Windows expone una interfaz basada en identificadores a los recursos del sistema. Para trabajar con un objeto de sistema operativo, la aplicación solicita primero un identificador al objeto y, a continuación, usa este identificador en llamadas de función posteriores para acceder o modificar el objeto. Un identificador se puede abrir normalmente en diferentes modos; el modo especificado afecta a la semántica de las llamadas de función posteriores. Por ejemplo, un identificador de archivo abierto por una llamada a CreateFile con la marca dwDesiredAccess establecida en GENERIC_READ no se puede usar en llamadas que modifiquen el archivo.

Puede coordinarse con recursos en modo de usuario del Coordinador de transacciones distribuidas , como SQL o MSMQ, y con recursos en modo kernel que usan KTM. En primer lugar, cree una transacción DTC o un objeto System.Transactions y, a continuación, llame al objeto IKernelTransaction , desde el que puede obtener el identificador KTM. El objeto IKernelTransaction crea una transacción KTM subordinada a la transacción DTC. Con este identificador, puede crear los objetos transaccionados, pero indicar el resultado de la transacción mediante DTC o System.Transactions.