Cómo usar NTFS transaccional

Identificadores de archivo de transacción

NTFS transaccional (TxF) enlaza un identificador de archivo a una transacción. En el caso de las operaciones que funcionan en un identificador (por ejemplo, las funciones ReadFile y WriteFile ), la llamada de función api real no cambia. En el caso de las operaciones de archivo que toman un nombre, hay funciones de transacción explícitas para estas operaciones. Por ejemplo, en lugar de llamar a CreateFile, llame a CreateFileTransacted. Esto crea un identificador de archivo transaccionado, que se puede usar para todas las operaciones de archivo que requieren un identificador. Todas las operaciones posteriores que usan este identificador son operaciones de transacción.

Uso básico de TxF

La siguiente serie de pasos representa el uso más básico de TxF. También se admiten escenarios más complejos, a discreción del diseñador de aplicaciones.

  1. Cree una transacción llamando a la función CreateTransaction de KTM o mediante la interfaz IKernelTransaction del Coordinador de transacciones distribuidas (DTC).
  2. Para obtener identificadores de archivo transaccionados, llame a CreateFileTransact.
  3. Modifique los archivos según sea necesario mediante los identificadores de archivo de transacción.
  4. Cierre todos los identificadores de archivo transaccionados asociados a la transacción creada en el paso 1.
  5. Confirme o anule la transacción llamando a la función KTM o DTC correspondiente.

Puntos clave del modelo de programación TxF

El modelo de programación TxF tiene los siguientes puntos clave que debe tener en cuenta al desarrollar una aplicación TxF:

  • Se recomienda encarecidamente que una aplicación cierre todos los identificadores de archivo de transacción antes de confirmar o revertir una transacción. El sistema invalida todos los identificadores transaccionados cuando finaliza una transacción. Cualquier operación, excepto close, realizada en un identificador de transacción después de que finalice la transacción devuelve el siguiente error: ERROR_HANDLE_NO_LONGER_VALID.
  • Un archivo se ve como una unidad de almacenamiento. Se admiten actualizaciones parciales y sobrescrituras de archivos completas. Varias transacciones no pueden modificar simultáneamente el mismo archivo.
  • La E/S asignada a memoria es transparente y coherente con la E/S de archivo normal. Una aplicación debe vaciar y cerrar una sección abierta antes de confirmar una transacción. Si no lo hace, se pueden producir cambios parciales en el archivo asignado dentro de la transacción. Si no se hace esto, se produce un error de reversión.

Errores comunes de programación

Se pueden producir los siguientes errores comunes al desarrollar aplicaciones de transacción:

  • Usar un identificador de archivo una vez completada una transacción.
  • No se pueden cerrar los identificadores de los archivos y directorios eliminados antes de confirmar una transacción, lo que impedirá que se produzcan las operaciones de eliminación. Este evento debe producirse antes de realizar la confirmación para que la operación de eliminación se considere parte de la transacción. Esto se debe a que el sistema no elimina realmente un archivo hasta que se cierra el último identificador, incluso cuando la operación no se realiza, como parte del subsistema de E/S de archivos de Windows.
  • No se pueden tener en cuenta las reversiones de transacciones iniciadas por el sistema, lo que puede ocurrir en cualquier momento; por ejemplo, se revierte una transacción si se agotan los recursos del sistema.