Как использовать транзакционную NTFS

Транзакционные дескрипторы файлов

Транзакционная NTFS (TxF) привязывает файловый обработчик к транзакции. Для операций, которые работают с маркером (например, функции ReadFile и WriteFile ), фактический вызов функции API не изменяется. Для операций с файлами, которые принимают имя, для этих операций существуют явные транзакционные функции. Например, вместо вызова функции CreateFileвызовите креатефилетрансактед. При этом создается файловый обработчик транзакций, который затем может использоваться для всех файловых операций, требующих маркера. Все последующие операции, использующие этот обработчик, являются транзакционными операциями.

Основные сведения об использовании TxF

Приведенная ниже последовательность действий представляет собой наиболее простой способ использования TxF. Более сложные сценарии также поддерживаются по усмотрению конструктора приложений.

  1. Создайте транзакцию путем вызова функции KTM CreateTransaction или с помощью интерфейса IKernelTransaction координатор распределенных транзакций (DTC).
  2. Получение обрабатываемых файлов транзакций путем вызова креатефилетрансактед.
  3. При необходимости измените файлы с помощью транзакционных файлов (file handles).
  4. Закройте все дескрипторы файлов транзакций, связанные с транзакцией, созданной на шаге 1.
  5. Зафиксируйте или прервать транзакцию, вызвав соответствующую функцию KTM или DTC.

Основные моменты модели программирования TxF

Модель программирования TxF имеет следующие ключевые моменты, которые необходимо учитывать при разработке приложения TxF:

  • Настоятельно рекомендуется, чтобы приложение закрывало все дескрипторы файлов транзакций перед фиксацией или откатом транзакции. Система делает недействительными все обработанные дескрипторы транзакций при завершении транзакции. Любая операция, кроме Close, выполненная для транзакционного обработчика после завершения транзакции, возвращает следующую ошибку: _ _ _ _ недопустимый обработчик ошибок.
  • Файл просматривается как единица хранения. Поддерживаются частичные обновления и полная перезапись файлов. Несколько транзакций не могут одновременно изменять один и тот же файл.
  • Отображаемые в памяти операции ввода-вывода прозрачны и соответствуют обычным файловым операциям ввода-вывода. Приложение должно очистить и закрыть открытый раздел перед фиксацией транзакции. Невыполнение этого действия может привести к частичному изменению сопоставленного файла в рамках транзакции. Если это не сделано, происходит сбой отката.

Распространенные ошибки программирования

При разработке транзакционных приложений могут возникать следующие распространенные ошибки.

  • Использование маркера файла после завершения транзакции.
  • Не удается закрыть дескрипторы для удаленных файлов и каталогов перед фиксацией транзакции, что предотвратит выполнение операций удаления. Это событие должно произойти перед выполнением фиксации для того, чтобы операция удаления считалась частью транзакции. Это обусловлено тем, что система фактически не удаляет файл до тех пор, пока не будет закрыт последний его обработчик, даже если операция не является транзакционной, как часть подсистемы ввода-вывода Windows.
  • Не удается выполнить откат транзакций, инициированных системой, что может произойти в любое время; Например, транзакция откатывается, если ресурсы системы исчерпаны.