public static Enlistment Reenlist(Guid resourceManagerIdentifier, byte[] recoveryInformation, IEnlistmentNotification enlistmentNotification) { if (resourceManagerIdentifier == Guid.Empty) { throw new ArgumentException(System.Transactions.SR.GetString("BadResourceManagerId"), "resourceManagerIdentifier"); } if (recoveryInformation == null) { throw new ArgumentNullException("recoveryInformation"); } if (enlistmentNotification == null) { throw new ArgumentNullException("enlistmentNotification"); } if (!_platformValidated) { ValidatePlatform(); } if (DiagnosticTrace.Verbose) { MethodEnteredTraceRecord.Trace(System.Transactions.SR.GetString("TraceSourceBase"), "TransactionManager.Reenlist"); } if (DiagnosticTrace.Information) { ReenlistTraceRecord.Trace(System.Transactions.SR.GetString("TraceSourceBase"), resourceManagerIdentifier); } MemoryStream input = new MemoryStream(recoveryInformation); string nodeName = null; byte[] buffer = null; try { BinaryReader reader = new BinaryReader(input); if (reader.ReadInt32() != 1) { if (DiagnosticTrace.Error) { TransactionExceptionTraceRecord.Trace(System.Transactions.SR.GetString("TraceSourceBase"), System.Transactions.SR.GetString("UnrecognizedRecoveryInformation")); } throw new ArgumentException(System.Transactions.SR.GetString("UnrecognizedRecoveryInformation"), "recoveryInformation"); } nodeName = reader.ReadString(); buffer = reader.ReadBytes(recoveryInformation.Length - ((int)input.Position)); } catch (EndOfStreamException exception2) { if (DiagnosticTrace.Error) { TransactionExceptionTraceRecord.Trace(System.Transactions.SR.GetString("TraceSourceBase"), System.Transactions.SR.GetString("UnrecognizedRecoveryInformation")); } throw new ArgumentException(System.Transactions.SR.GetString("UnrecognizedRecoveryInformation"), "recoveryInformation", exception2); } catch (FormatException exception) { if (DiagnosticTrace.Error) { TransactionExceptionTraceRecord.Trace(System.Transactions.SR.GetString("TraceSourceBase"), System.Transactions.SR.GetString("UnrecognizedRecoveryInformation")); } throw new ArgumentException(System.Transactions.SR.GetString("UnrecognizedRecoveryInformation"), "recoveryInformation", exception); } finally { input.Close(); } OletxTransactionManager manager = CheckTransactionManager(nodeName); object syncRoot = new object(); Enlistment enlistment = new Enlistment(enlistmentNotification, syncRoot); EnlistmentState._EnlistmentStatePromoted.EnterState(enlistment.InternalEnlistment); enlistment.InternalEnlistment.PromotedEnlistment = manager.ReenlistTransaction(resourceManagerIdentifier, buffer, (RecoveringInternalEnlistment)enlistment.InternalEnlistment); if (DiagnosticTrace.Verbose) { MethodExitedTraceRecord.Trace(System.Transactions.SR.GetString("TraceSourceBase"), "TransactionManager.Reenlist"); } return(enlistment); }