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 a la 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 de transacción, 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.
- Cree una transacción llamando a la función KTM CreateTransaction o mediante la interfaz IKernelTransaction del Coordinador de transacciones distribuidas (DTC).
- Obtenga los identificadores de archivo de transacción mediante una llamada a CreateFileTransacted.
- Modifique los archivos según sea necesario mediante los identificadores de archivo de transacción.
- Cierre todos los identificadores de archivo de transacción asociados a la transacción creada en el paso 1.
- 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 de transacción cuando finaliza una transacción. Cualquier operación, excepto cerrar, realizada en un identificador de transacción una vez finalizada 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. Se produce un error de reversión si no se realiza.
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.