Partilhar via


Trabalhando com transações

Os criadores de aplicativos podem fazer pequenas alterações no código-fonte para adicionar operações de arquivo e registro transacionadas usando o Kernel Transaction Manager (KTM). Normalmente, este processo envolverá a criação de uma transação e a passagem do identificador para outras funções fornecidas por recursos transacionais, como NTFS Transacional e o Registo Transacionado.

A KTM fornece mecanismos para que a sua aplicação participe em transações, bem como para escrever o seu próprio gestor de recursos transacionais. Há funções que permitem criar, gerenciar e trabalhar com quatro classes de objetos do kernel: transações, gerenciadores de transações, gerenciadores de recursos e alistamentos. Se você estiver simplesmente usando transações, você só precisa trabalhar com objetos de transação e usar estas funções:

Nunca assuma que uma transação está ativa. As transações podem ser revertidas por vários motivos e a qualquer momento.

O Windows expõe uma interface baseada em identificador aos recursos do sistema. Para trabalhar com um objeto do sistema operacional, o aplicativo primeiro solicita um identificador para o objeto e, em seguida, usa esse identificador em chamadas de função subsequentes para acessar ou modificar o objeto. Uma alça geralmente pode ser aberta em diferentes modos; O modo especificado afeta a semântica de chamadas de função subsequentes. Por exemplo, um manipulador de ficheiro que é aberto por uma chamada para CreateFile com o indicador dwDesiredAccess definido como GENERIC_READ não pode ser usado em chamadas que modificam o ficheiro.

Você pode coordenar com Coordenador de Transações Distribuídas recursos de modo de usuário, como SQL ou MSMQ, e com recursos de modo kernel que usam a KTM. Primeiro, crie uma transação DTC ou um objeto System.Transactions, e em seguida chame o objeto IKernelTransaction, do qual se pode obter o identificador KTM. O objeto IKernelTransaction cria uma transação KTM subordinada à transação DTC. Com esse identificador, você pode criar seus objetos transacionados, mas sinalizar o resultado da transação usando DTC ou System.Transactions.