Поделиться через


Работа с транзакциями

Средства записи приложений могут вносить незначительные изменения в исходный код для добавления транзакционных операций с файлами и реестром с помощью диспетчера транзакций ядра (KTM). Как правило, для этого требуется создать транзакцию и передать дескриптор другим функциям, предоставляемым транзакционных ресурсов, таким как транзакционная ntfs и transacted Registry.

KTM предоставляет механизмы для участия приложения в транзакциях, а также для создания собственного диспетчера транзакционных ресурсов. Существуют функции, которые позволяют создавать, администрировать и работать с четырьмя классами объектов ядра: транзакциями, диспетчерами транзакций, диспетчерами ресурсов и прикреплениями. Если вы используете просто транзакции, вам нужно работать только с объектами транзакций и использовать следующие функции:

Никогда не предполагайте, что транзакция активна. Откат транзакций можно выполнить по многим причинам и в любое время.

Windows предоставляет системным ресурсам интерфейс на основе дескрипторов. Для работы с объектом операционной системы приложение сначала запрашивает дескриптор к объекту , а затем использует этот дескриптор в последующих вызовах функций для доступа к объекту или его изменения. Дескриптор обычно можно открыть в разных режимах; указанный режим влияет на семантику последующих вызовов функций. Например, дескриптор файла, открытый вызовом CreateFile с флагом dwDesiredAccess , для GENERIC_READ нельзя использовать в вызовах, изменяющих файл.

Вы можете координировать работу с ресурсами координатора распределенных транзакций в пользовательском режиме, такими как SQL или MSMQ, а также с ресурсами режима ядра, которые используют KTM. Сначала создайте транзакцию DTC или объект System.Transactions , а затем вызовите объект IKernelTransaction , из которого можно получить дескриптор KTM. Объект IKernelTransaction создает транзакцию KTM, подчиненную транзакции DTC. С помощью этого дескриптора можно создать объекты транзакций, но сообщить о результате транзакции с помощью DTC или System.Transactions.