Schreiben eines Resource Manager
Wenn Sie einen Dienst oder eine Komponente schreiben und Transaktionsdienste verwenden müssen oder den Status einer Kerneltransaktion überwachen müssen, müssen Sie einen Ressourcen-Manager (RM) erstellen.
Um einen Ressourcen-Manager zu schreiben, müssen Sie mehrere Kernelobjekte erstellen. Von einem RM werden die folgenden Objekte verwendet:
- Transaction Manager-Objekte (TM)
- Resource Manager Objekte
- Eintragungsobjekte
Erstellen Sie zunächst ein TM-Objekt. Es gibt zwei Arten von TMs:
- Flüchtig: Diese TMs verfügen nicht über ein Protokoll und können ihren Zustand nicht wiederherstellen.
- Dauerhaft: Diese TMs verfügen über ein Protokoll.
Um ein dauerhaftes TM zu erstellen, müssen Sie entweder ein CLFS-Protokoll erstellen und CreateTransactionManager aufrufen oder KTM das Protokoll für Sie erstellen lassen. Nachdem ein dauerhaftes TM erstellt wurde, müssen Sie zuerst den TM wiederherstellen, indem Sie RecoverTransactionManager aufrufen. Nachdem der TM wiederhergestellt wurde, ist er zur Verwendung verfügbar.
Wenn Sie ein vorhandenes TM wiederhergestellt haben, empfangen alle diesem TM zugeordneten RMs Wiederherstellungsmeldungen. Weitere Informationen finden Sie unter Wiederherstellungsverarbeitung.
Als Nächstes erstellen Sie einen Ressourcen-Manager, indem Sie CreateResourceManager mit dem TM-Handle aufrufen. Der RM kann flüchtig oder dauerhaft sein. Nur dauerhafte TMs können mit permanenten RMs verwendet werden.
Wenn Sie transaktional arbeiten, werden Sie in die Transaktion ein eintragungen, indem Sie CreateEnlistmentaufrufen und angeben, welche Benachrichtigungen empfangen werden sollen.
Hinweis: Sie können damit beginnen, Benachrichtigungen zu erhalten, bevor der Aufruf von CreateEnlistment abgeschlossen ist.
Wenn Sie eine Benachrichtigung erhalten, rufen Sie die entsprechende "Complete"-Funktion auf, wenn die Verarbeitung der * Benachrichtigung abgeschlossen ist. Die vollständigen Funktionen sind:
Wenn ein Ressourcen-Manager die Arbeit der Transaktion zu einem beliebigen Zeitpunkt nicht abschließen kann oder wenn das Fortsetzen der Anwendung dazu führen würde, dass die in der Transaktion ausgeführte Arbeit nicht rückgängig gemacht werden kann, müssen Sie ein Rollback für die Transaktion durch Aufrufen von RollbackEnlistment erstellen.