Life of a Transaction: Transaction Recovery (Phases)

m1.1 During recovery, the resource manager first does the Resource Manager Start Up procedure described above. As a result of these start-up steps, the resource manager obtains a pointer to the IResourceManager interface.
m1.2 The resource manager reads its log file and determines which transactions are in-doubt. For each of these transactions it calls the IResourceManager::Reenlist method. The resource manager passes in both the prepare information it was originally given by the transaction manager and a time-out value which indicates how long the resource manager is willing to wait to learn the outcome of the transaction.
m2 The MS DTC proxy communicates this information to the transaction manager.
m3 The transaction manager determines the outcome of the transaction, if possible, and returns the transaction outcome to the MS DTC proxy.
m4 The MS DTC proxy responds to the resource manager indicating whether the in-doubt transaction was committed or aborted. If the transaction’s outcome cannot be determined before the time-out expires, then a re-enlistment time-out error is returned to the resource manager.
m5.1 The resource manager records each transaction’s outcome by writing a commit or abort record in the resource manager log file.
m5.2 When the resource manager has determined the outcome of all in-doubt transactions, it invokes the IResourceManager::ReenlistmentComplete method. The resource manager uses this method to inform the transaction manager that the resource manager knows the outcome of all in-doubt transactions in which it is involved.
m6 The MS DTC proxy informs the transaction manager that recovery is complete.
m7 The transaction manager discards any information it was keeping regarding committed transactions that this resource manager might have been involved in.