StreamDocument.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / TrustUi / MS / Internal / documents / Application / StreamDocument.cs / 1 / StreamDocument.cs

                            //------------------------------------------------------------------------------ 
// 
//    Copyright (C) Microsoft Corporation.  All rights reserved. 
//
//  
// Extends Document with a support for StreamProxy versus simply stream.
//  
// 
// History:
//  08/28/2005: [....]: Initial implementation. 
//-----------------------------------------------------------------------------

using System.IO;
using System.Security; 

namespace MS.Internal.Documents.Application 
{ 
/// 
/// Extends Document with a support for StreamProxy versus simply stream. 
/// 
/// The type of stream to back the document with.
/// 
internal class StreamDocument : Document where T : StreamProxy 
{
    #region Constructors 
    //------------------------------------------------------------------------- 
    // Constructors
    //------------------------------------------------------------------------- 

    internal StreamDocument(Document dependency)
        : base(dependency) { }
 
    #endregion Constructors
 
    #region Internal Properties 
    //--------------------------------------------------------------------------
    // Internal Properties 
    //-------------------------------------------------------------------------

    /// 
    ///  
    /// 
    internal override Stream Destination 
    { 
        get { return _destination.Value; }
    } 

    /// 
    /// The T that is backing the Destination stream.
    ///  
    /// 
    /// Critical: 
    ///  - set critical field 
    ///  - field is critical as security descisions are based on it
    ///  - audit only DocumentControllers & self should set 
    /// 
    internal T DestinationProxy
    {
        get { return _destination.Value; } 
        [SecurityCritical]
        set { _destination.Value = value; } 
    } 

    ///  
    /// 
    /// 
    internal override Stream Source
    { 
        get { return _source.Value; }
    } 
 
    /// 
    /// The T that is backing the Source stream. 
    /// 
    /// 
    /// Critical:
    ///  - set critical field 
    ///  - field is critical as security descisions are based on it
    ///  - audit only DocumentControllers & self should set 
    ///  
    internal T SourceProxy
    { 
        get { return _source.Value; }
        [SecurityCritical]
        set { _source.Value = value; }
    } 

    ///  
    ///  
    /// 
    internal override Stream Workspace 
    {
        get { return _workspace.Value; }
    }
 
    /// 
    /// The T that is backing the Workspace stream. 
    ///  
    /// 
    /// Critical: 
    ///  - set critical field
    ///  - field is critical as security descisions are based on it
    ///  - audit only DocumentControllers & self should set
    ///  
    internal T WorkspaceProxy
    { 
        get { return _workspace.Value; } 
        [SecurityCritical]
        set { _workspace.Value = value; } 
    }

    #endregion Internal Properties
 
    #region Protected Methods
    //-------------------------------------------------------------------------- 
    // Protected Methods 
    //--------------------------------------------------------------------------
 
    /// 
    /// Will close streams in the reverse order of intended creation.
    /// 
    ///  
    /// Critical
    ///  1) Calling critical property setters *Proxy. 
    /// TreatAsSafe 
    ///  1) Setting them to known safe value null.
    ///  
    [SecurityCritical, SecurityTreatAsSafe]
    protected void ReleaseStreams()
    {
        try 
        {
            // closing in revers order of creation 
            if (DestinationProxy != null) 
            {
                if (DestinationProxy == SourceProxy) 
                {
                    SourceProxy = null;
                }
                DestinationProxy.Close(); 
                DestinationProxy = null;
            } 
        } 
        finally
        { 
            try
            {
                if (WorkspaceProxy != null)
                { 
                    WorkspaceProxy.Close();
                    WorkspaceProxy = null; 
                } 
            }
            finally 
            {
                if (SourceProxy != null)
                {
                    SourceProxy.Close(); 
                    SourceProxy = null;
                } 
            } 
        }
    } 

    #endregion Protected Methods

    #region IDisposable Members 
    //-------------------------------------------------------------------------
    // IDisposable Members 
    //-------------------------------------------------------------------------- 

    ///  
    /// 
    /// 
    protected override void Dispose(bool disposing)
    { 
        try
        { 
            if (disposing) 
            {
                ReleaseStreams(); 
            }
        }
        finally
        { 
            base.Dispose(true);
        } 
    } 
    #endregion IDisposable Members
 
    #region Private Fields
    //-------------------------------------------------------------------------
    // Private Fields
    //------------------------------------------------------------------------- 

    private SecurityCriticalDataForSet _destination = 
        new SecurityCriticalDataForSet(); 
    private SecurityCriticalDataForSet _source =
        new SecurityCriticalDataForSet(); 
    private SecurityCriticalDataForSet _workspace =
        new SecurityCriticalDataForSet();
    #endregion Private Fields
} 
}

// 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
This book is available now!
Buy at Amazon US or
Buy at Amazon UK