Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / DEVDIV / depot / DevDiv / releases / whidbey / QFE / ndp / fx / src / xsp / System / Web / Configuration / RemoteWebConfigurationHostStream.cs / 1 / RemoteWebConfigurationHostStream.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Configuration { using System.Collections; using System.Configuration; using System.Web; using System.Web.Util; using System.Security; using System.Security.Principal; using System.IO; using System.Web.Hosting; using System.Runtime.InteropServices; using System.Security.Permissions; [SecurityPermission(SecurityAction.Demand, Unrestricted = true)] internal class RemoteWebConfigurationHostStream : Stream { private string _FileName; private string _TemplateFileName; private string _Server; private MemoryStream _MemoryStream; private bool _IsDirty = false; private long _ReadTime = 0; private WindowsIdentity _Identity; private string _Username; private string _Domain; private string _Password; private bool _streamForWrite; internal RemoteWebConfigurationHostStream(bool streamForWrite, string serverName, string streamName, string templateStreamName, string username, string domain, string password, WindowsIdentity identity) { _Server = serverName; _FileName = streamName; _TemplateFileName = templateStreamName; _Username = username; _Domain = domain; _Password = password; _Identity = identity; _streamForWrite = streamForWrite; } private void Init() { #if !FEATURE_PAL // FEATURE_PAL does not enable COM if (_MemoryStream != null) return; byte[] buf = null; WindowsImpersonationContext wiContext = null; try { //////////////////////////////////////////////////////////// // Step 1: Set the impersonation if required if (_Identity != null) { wiContext = _Identity.Impersonate(); } try { IRemoteWebConfigurationHostServer remoteSrv = RemoteWebConfigurationHost.CreateRemoteObject(_Server, _Username, _Domain, _Password); try { // If we open the stream for writing, we only need to get the _ReadTime because // we will create an empty memory stream for write. buf = remoteSrv.GetData(_FileName, _streamForWrite, out _ReadTime); } finally { while (Marshal.ReleaseComObject(remoteSrv) > 0) { } } } catch { throw; } finally { if (wiContext != null) { wiContext.Undo(); // revert impersonation } } } catch { throw; } if (buf == null || buf.Length < 1) { _MemoryStream = new MemoryStream(); } else { _MemoryStream = new MemoryStream(buf.Length); _MemoryStream.Write(buf, 0, buf.Length); _MemoryStream.Position = 0; } #else // !FEATURE_PAL throw new NotSupportedException(); #endif // !FEATURE_PAL } public override bool CanRead { get { return true; } } public override bool CanSeek { get { return true; } } public override bool CanWrite { get { return true; } } public override long Length { get { Init(); return _MemoryStream.Length; } } public override long Position { get { Init(); return _MemoryStream.Position; } set { Init(); _MemoryStream.Position = value; } } public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { Init(); return _MemoryStream.BeginRead(buffer, offset, count, callback, state); } public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { _IsDirty = true; Init(); if (offset + count > _MemoryStream.Length) _MemoryStream.SetLength(offset + count); return _MemoryStream.BeginWrite(buffer, offset, count, callback, state); } protected override void Dispose(bool disposing) { try { if (disposing && _MemoryStream != null) { Flush(); _MemoryStream.Close(); } } finally { base.Dispose(disposing); } } public override System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType) { throw new System.Runtime.Remoting.RemotingException(); } public override int EndRead(IAsyncResult asyncResult) { Init(); return _MemoryStream.EndRead(asyncResult); } public override void EndWrite(IAsyncResult asyncResult) { Init(); _MemoryStream.EndWrite(asyncResult); } public override void Flush() { // It's a memory stream. Don't need to flush anything. } internal void FlushForWriteCompleted() { #if !FEATURE_PAL // FEATURE_PAL does not enable COM if (_IsDirty && _MemoryStream != null) { WindowsImpersonationContext wiContext = null; try { //////////////////////////////////////////////////////////// // Step 1: Set the impersonation if required if (_Identity != null) { wiContext = _Identity.Impersonate(); } try { IRemoteWebConfigurationHostServer remoteSrv = RemoteWebConfigurationHost.CreateRemoteObject(_Server, _Username, _Domain, _Password); try { remoteSrv.WriteData(_FileName, _TemplateFileName, _MemoryStream.ToArray(), ref _ReadTime); } catch { throw; } finally { while (Marshal.ReleaseComObject(remoteSrv) > 0) { } } } catch { throw; } finally { if (wiContext != null) { wiContext.Undo(); } } } catch { throw; } _MemoryStream.Flush(); _IsDirty = false; } #else // !FEATURE_PAL throw new NotSupportedException(); #endif // !FEATURE_PAL } public override object InitializeLifetimeService() { Init(); return _MemoryStream.InitializeLifetimeService(); } public override int Read(byte[] buffer, int offset, int count) { Init(); return _MemoryStream.Read(buffer, offset, count); } public override int ReadByte() { Init(); return _MemoryStream.ReadByte(); } public override long Seek(long offset, SeekOrigin origin) { Init(); return _MemoryStream.Seek(offset, origin); } public override void SetLength(long val) { _IsDirty = true; Init(); _MemoryStream.SetLength(val); } public override void Write(byte[] buffer, int offset, int count) { _IsDirty = true; Init(); if (offset + count > _MemoryStream.Length) _MemoryStream.SetLength(offset + count); _MemoryStream.Write(buffer, offset, count); } public override void WriteByte(byte val) { _IsDirty = true; Init(); _MemoryStream.WriteByte(val); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Configuration { using System.Collections; using System.Configuration; using System.Web; using System.Web.Util; using System.Security; using System.Security.Principal; using System.IO; using System.Web.Hosting; using System.Runtime.InteropServices; using System.Security.Permissions; [SecurityPermission(SecurityAction.Demand, Unrestricted = true)] internal class RemoteWebConfigurationHostStream : Stream { private string _FileName; private string _TemplateFileName; private string _Server; private MemoryStream _MemoryStream; private bool _IsDirty = false; private long _ReadTime = 0; private WindowsIdentity _Identity; private string _Username; private string _Domain; private string _Password; private bool _streamForWrite; internal RemoteWebConfigurationHostStream(bool streamForWrite, string serverName, string streamName, string templateStreamName, string username, string domain, string password, WindowsIdentity identity) { _Server = serverName; _FileName = streamName; _TemplateFileName = templateStreamName; _Username = username; _Domain = domain; _Password = password; _Identity = identity; _streamForWrite = streamForWrite; } private void Init() { #if !FEATURE_PAL // FEATURE_PAL does not enable COM if (_MemoryStream != null) return; byte[] buf = null; WindowsImpersonationContext wiContext = null; try { //////////////////////////////////////////////////////////// // Step 1: Set the impersonation if required if (_Identity != null) { wiContext = _Identity.Impersonate(); } try { IRemoteWebConfigurationHostServer remoteSrv = RemoteWebConfigurationHost.CreateRemoteObject(_Server, _Username, _Domain, _Password); try { // If we open the stream for writing, we only need to get the _ReadTime because // we will create an empty memory stream for write. buf = remoteSrv.GetData(_FileName, _streamForWrite, out _ReadTime); } finally { while (Marshal.ReleaseComObject(remoteSrv) > 0) { } } } catch { throw; } finally { if (wiContext != null) { wiContext.Undo(); // revert impersonation } } } catch { throw; } if (buf == null || buf.Length < 1) { _MemoryStream = new MemoryStream(); } else { _MemoryStream = new MemoryStream(buf.Length); _MemoryStream.Write(buf, 0, buf.Length); _MemoryStream.Position = 0; } #else // !FEATURE_PAL throw new NotSupportedException(); #endif // !FEATURE_PAL } public override bool CanRead { get { return true; } } public override bool CanSeek { get { return true; } } public override bool CanWrite { get { return true; } } public override long Length { get { Init(); return _MemoryStream.Length; } } public override long Position { get { Init(); return _MemoryStream.Position; } set { Init(); _MemoryStream.Position = value; } } public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { Init(); return _MemoryStream.BeginRead(buffer, offset, count, callback, state); } public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { _IsDirty = true; Init(); if (offset + count > _MemoryStream.Length) _MemoryStream.SetLength(offset + count); return _MemoryStream.BeginWrite(buffer, offset, count, callback, state); } protected override void Dispose(bool disposing) { try { if (disposing && _MemoryStream != null) { Flush(); _MemoryStream.Close(); } } finally { base.Dispose(disposing); } } public override System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType) { throw new System.Runtime.Remoting.RemotingException(); } public override int EndRead(IAsyncResult asyncResult) { Init(); return _MemoryStream.EndRead(asyncResult); } public override void EndWrite(IAsyncResult asyncResult) { Init(); _MemoryStream.EndWrite(asyncResult); } public override void Flush() { // It's a memory stream. Don't need to flush anything. } internal void FlushForWriteCompleted() { #if !FEATURE_PAL // FEATURE_PAL does not enable COM if (_IsDirty && _MemoryStream != null) { WindowsImpersonationContext wiContext = null; try { //////////////////////////////////////////////////////////// // Step 1: Set the impersonation if required if (_Identity != null) { wiContext = _Identity.Impersonate(); } try { IRemoteWebConfigurationHostServer remoteSrv = RemoteWebConfigurationHost.CreateRemoteObject(_Server, _Username, _Domain, _Password); try { remoteSrv.WriteData(_FileName, _TemplateFileName, _MemoryStream.ToArray(), ref _ReadTime); } catch { throw; } finally { while (Marshal.ReleaseComObject(remoteSrv) > 0) { } } } catch { throw; } finally { if (wiContext != null) { wiContext.Undo(); } } } catch { throw; } _MemoryStream.Flush(); _IsDirty = false; } #else // !FEATURE_PAL throw new NotSupportedException(); #endif // !FEATURE_PAL } public override object InitializeLifetimeService() { Init(); return _MemoryStream.InitializeLifetimeService(); } public override int Read(byte[] buffer, int offset, int count) { Init(); return _MemoryStream.Read(buffer, offset, count); } public override int ReadByte() { Init(); return _MemoryStream.ReadByte(); } public override long Seek(long offset, SeekOrigin origin) { Init(); return _MemoryStream.Seek(offset, origin); } public override void SetLength(long val) { _IsDirty = true; Init(); _MemoryStream.SetLength(val); } public override void Write(byte[] buffer, int offset, int count) { _IsDirty = true; Init(); if (offset + count > _MemoryStream.Length) _MemoryStream.SetLength(offset + count); _MemoryStream.Write(buffer, offset, count); } public override void WriteByte(byte val) { _IsDirty = true; Init(); _MemoryStream.WriteByte(val); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BridgeDataReader.cs
- AsyncOperation.cs
- SequentialUshortCollection.cs
- XmlText.cs
- EdmError.cs
- RefreshPropertiesAttribute.cs
- WCFModelStrings.Designer.cs
- ViewValidator.cs
- XmlEncodedRawTextWriter.cs
- MonitoringDescriptionAttribute.cs
- GlyphRunDrawing.cs
- Timer.cs
- OdbcConnectionOpen.cs
- VerticalConnector.xaml.cs
- MulticastOption.cs
- ThicknessAnimationUsingKeyFrames.cs
- BaseTreeIterator.cs
- EdgeProfileValidation.cs
- EntityConnectionStringBuilder.cs
- XmlText.cs
- WebEncodingValidatorAttribute.cs
- RegionIterator.cs
- oledbconnectionstring.cs
- Exceptions.cs
- DiagnosticsConfiguration.cs
- Char.cs
- AssemblyLoader.cs
- SystemNetHelpers.cs
- XmlCountingReader.cs
- ConfigXmlElement.cs
- SizeAnimationClockResource.cs
- ACL.cs
- WasAdminWrapper.cs
- ipaddressinformationcollection.cs
- MergeLocalizationDirectives.cs
- QuadraticBezierSegment.cs
- CommandHelper.cs
- GeometryCombineModeValidation.cs
- counter.cs
- TreeView.cs
- DataGridAddNewRow.cs
- ToolStripRendererSwitcher.cs
- GetResponse.cs
- FieldDescriptor.cs
- UserInitiatedRoutedEventPermission.cs
- DependencyPropertyDescriptor.cs
- UriParserTemplates.cs
- CryptoApi.cs
- TabItemWrapperAutomationPeer.cs
- ADConnectionHelper.cs
- NgenServicingAttributes.cs
- COM2ColorConverter.cs
- SourceSwitch.cs
- NativeMethods.cs
- SettingsPropertyValue.cs
- TextComposition.cs
- RegexCompilationInfo.cs
- ExtendedPropertyCollection.cs
- MsmqIntegrationInputMessage.cs
- SemanticTag.cs
- UniqueContractNameValidationBehavior.cs
- Mutex.cs
- LongTypeConverter.cs
- SiblingIterators.cs
- GridViewRowPresenter.cs
- NamespaceEmitter.cs
- PocoPropertyAccessorStrategy.cs
- CommandField.cs
- RemotingConfigParser.cs
- PerformanceCounterPermissionAttribute.cs
- DesignerInterfaces.cs
- AuthenticationException.cs
- Maps.cs
- OdbcCommand.cs
- PackageRelationship.cs
- ConstrainedGroup.cs
- Identity.cs
- JournalEntryListConverter.cs
- FastEncoder.cs
- CommonXSendMessage.cs
- IIS7WorkerRequest.cs
- BindingBase.cs
- versioninfo.cs
- GeometryDrawing.cs
- SEHException.cs
- WinOEToolBoxItem.cs
- GridViewRowCollection.cs
- AxisAngleRotation3D.cs
- TreeNodeEventArgs.cs
- QuaternionAnimationUsingKeyFrames.cs
- OptimisticConcurrencyException.cs
- Point.cs
- ByteStreamGeometryContext.cs
- UTF8Encoding.cs
- ParserExtension.cs
- Gdiplus.cs
- FieldToken.cs
- Int32Converter.cs
- Italic.cs
- RootNamespaceAttribute.cs