Trabalhando com transações

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

O KTM fornece mecanismos para que seu aplicativo participe de transações, bem como para escrever seu próprio gerenciador de recursos transacionais. Há funções que permitem criar, gerenciar e trabalhar com quatro classes de objetos kernel: transações, gerenciadores de transações, gerenciadores de recursos e inscrições. Se você estiver simplesmente usando transações, só precisará trabalhar com objetos de transação e usar estas funções:

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

O Windows expõe uma interface baseada em identificador para 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. Um identificador geralmente pode ser aberto em modos diferentes; o modo especificado afeta a semântica de chamadas de função subsequentes. Por exemplo, um identificador de arquivo aberto por uma chamada para CreateFile com o sinalizador dwDesiredAccess definido como GENERIC_READ não pode ser usado em chamadas que modificam o arquivo.

Você pode coordenar com recursos de modo de usuário do Coordenador de Transações Distribuídas , como SQL ou MSMQ, e com recursos de modo kernel que usam o KTM. Primeiro, crie uma transação DTC ou um objeto System.Transactions e, em seguida, chame o objeto IKernelTransaction , do qual você 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.