Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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.
//
//-----------------------------------------------------------------------------
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CookieHandler.cs
- GridLengthConverter.cs
- TextRunCacheImp.cs
- BitmapEditor.cs
- BlurEffect.cs
- ProfileProvider.cs
- DesignTimeVisibleAttribute.cs
- StringHelper.cs
- StateFinalizationDesigner.cs
- NameSpaceExtractor.cs
- HostUtils.cs
- CodeGroup.cs
- WaitHandle.cs
- Encoder.cs
- GatewayDefinition.cs
- DocumentViewerConstants.cs
- EncodingNLS.cs
- MetabaseServerConfig.cs
- HierarchicalDataBoundControlAdapter.cs
- BinaryParser.cs
- XmlRawWriter.cs
- ProfilePropertySettingsCollection.cs
- CellIdBoolean.cs
- IdnElement.cs
- ToolStripRenderEventArgs.cs
- IsolatedStorageFileStream.cs
- HttpContext.cs
- ParserContext.cs
- RtfToXamlReader.cs
- DelayedRegex.cs
- SamlEvidence.cs
- PageStatePersister.cs
- VisualStyleInformation.cs
- ComponentDispatcher.cs
- DatagridviewDisplayedBandsData.cs
- JoinCqlBlock.cs
- ButtonAutomationPeer.cs
- SoapObjectInfo.cs
- PlatformCulture.cs
- UInt32.cs
- CapabilitiesSection.cs
- path.cs
- KeyedPriorityQueue.cs
- GeometryGroup.cs
- SortedList.cs
- COM2Enum.cs
- XmlSchemaAttribute.cs
- APCustomTypeDescriptor.cs
- ResourcePermissionBaseEntry.cs
- GPPOINTF.cs
- DecimalStorage.cs
- StringDictionary.cs
- Calendar.cs
- DocumentViewerConstants.cs
- WindowsListViewItemCheckBox.cs
- RemotingHelper.cs
- GlyphElement.cs
- QilList.cs
- DataServiceHostWrapper.cs
- DateTimePicker.cs
- ArraySet.cs
- AsyncCompletedEventArgs.cs
- WebPartHeaderCloseVerb.cs
- DesignTimeXamlWriter.cs
- GlobalizationAssembly.cs
- _SecureChannel.cs
- ConsoleCancelEventArgs.cs
- _HeaderInfo.cs
- ToolStripItemClickedEventArgs.cs
- XhtmlMobileTextWriter.cs
- PrePrepareMethodAttribute.cs
- FilteredDataSetHelper.cs
- HttpProfileGroupBase.cs
- ClientData.cs
- UntypedNullExpression.cs
- StringDictionaryCodeDomSerializer.cs
- PropertyCollection.cs
- FlowDocumentReaderAutomationPeer.cs
- XmlSchemaSimpleContentExtension.cs
- Debug.cs
- AddInEnvironment.cs
- FragmentNavigationEventArgs.cs
- cookiecontainer.cs
- DropTarget.cs
- Comparer.cs
- WinFormsUtils.cs
- ReferenceConverter.cs
- CustomWebEventKey.cs
- CqlLexer.cs
- HwndSourceKeyboardInputSite.cs
- XPathException.cs
- ToolStripDropDownClosedEventArgs.cs
- SupportsPreviewControlAttribute.cs
- DataSetMappper.cs
- COM2PropertyPageUITypeConverter.cs
- StorageInfo.cs
- EntitySetRetriever.cs
- HtmlSelect.cs
- SecurityPermission.cs
- HttpCookieCollection.cs