Como usar o NTFS transacional

Identificadores de arquivos transacionados

O TxF (NTFS transacional) associa um identificador de arquivo a uma transação. Para operações que funcionam em um identificador (por exemplo, as funções ReadFile e WriteFile ), a chamada de função de API real não é alterada. Para operações de arquivo que levam um nome, há funções transacionadas explícitas para essas operações. Por exemplo, em vez de chamar CreateFile, chame CreateFileTransacted. Isso cria um identificador de arquivo transacionado, que pode ser usado para todas as operações de arquivo que exigem um identificador. Todas as operações subsequentes que usam esse identificador são operações transacionadas.

Uso básico do TxF

A série de etapas a seguir representa o uso mais básico do TxF. Também há suporte para cenários mais complexos, a critério do designer de aplicativos.

  1. Crie uma transação chamando a função KTM CreateTransaction ou usando a interface IKernelTransaction do Coordenador de Transações Distribuídas (DTC).
  2. Obtenha identificadores de arquivo transacionados chamando CreateFileTransacted.
  3. Modifique os arquivos conforme necessário usando os identificadores de arquivo transacionados.
  4. Feche todos os identificadores de arquivo transacionados associados à transação criada na etapa 1.
  5. Confirme ou anule a transação chamando a função KTM ou DTC correspondente.

Pontos-chave do modelo de programação TxF

O modelo de programação TxF tem os seguintes pontos-chave a serem considerados ao desenvolver um aplicativo TxF:

  • É altamente recomendável que um aplicativo feche todos os identificadores de arquivo transacionados antes de confirmar ou reverter uma transação. O sistema invalida todos os identificadores transacionados quando uma transação termina. Qualquer operação, exceto fechar, executada em um identificador transacionado após o término da transação retorna o seguinte erro: ERROR_HANDLE_NO_LONGER_VALID.
  • Um arquivo é exibido como uma unidade de armazenamento. Há suporte para atualizações parciais e substituições de arquivo completas. Várias transações não podem modificar simultaneamente o mesmo arquivo.
  • A E/S mapeada de memória é transparente e consistente com a E/S do arquivo regular. Um aplicativo deve liberar e fechar uma seção aberta antes de confirmar uma transação. A falha ao fazer isso pode resultar em alterações parciais no arquivo mapeado dentro da transação. Uma reversão falhará se isso não for feito.

Erros comuns de programação

Os seguintes erros comuns podem ocorrer ao desenvolver aplicativos transacionados:

  • Usando um identificador de arquivo após a conclusão de uma transação.
  • Falha ao fechar identificadores para arquivos e diretórios excluídos antes de confirmar uma transação, o que impedirá que as operações de exclusão ocorram. Esse evento deve ocorrer antes de executar o commit para que a operação de exclusão seja considerada parte da transação. Isso ocorre porque o sistema não exclui um arquivo até que o último identificador para ele seja fechado, mesmo quando a operação não for transacionada, como parte do subsistema de E/S de arquivo do Windows.
  • Falha ao considerar as reversões de transação iniciadas pelo sistema, o que pode acontecer a qualquer momento; por exemplo, uma transação será revertida se os recursos do sistema estiverem esgotados.