Life of a Transaction: Enlistment in a Transaction I (Phases)

i1 The client invokes the RM proxy, asking it to perform a resource manager operation. For a relational database this might involve inserting, deleting, or updating a record, or invoking a stored procedure that updates the database.
i2 The RM proxy sends a message to the resource manager asking it to perform the appropriate operation.
i3 The resource manager determines which transaction, if any, is associated with this RM proxy-to-resource manager session. If a transaction is associated with the session, the resource manager determines if it has already enlisted in this transaction. If not, it invokes the IResourceManager::Enlist method. The first Enlist parameter is a pointer to the transaction object. The second Enlist parameter is a pointer to the ITransactionResourceAsync interface. The resource manager is responsible for implementing the ITransactionResourceAsync interface. This interface includes the PrepareRequest, CommitRequest, AbortRequest and TMDown callback methods. The transaction manager will invoke these resource manager callback methods to deliver phase one and phase two notifications to the resource manager.
i4 The MS DTC proxy communicates with the transaction manager, informing it that the resource manager chooses to enlist in the transaction.