ColorContextHelper.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Media / ColorContextHelper.cs / 1544694 / ColorContextHelper.cs

                            //------------------------------------------------------------------------------ 
//  Microsoft Windows Client Platform
//  Copyright (c) Microsoft Corporation, 2001, 2002, 2003
//
//  File: ColorContextHelper.cs 
//-----------------------------------------------------------------------------
 
using System; 
using System.IO;
using System.Runtime.InteropServices; 
using System.Windows.Media;
using System.Windows.Media.Imaging;
using MS.Internal;
using MS.Win32; 
using System.Security;
using System.Security.Permissions; 
using System.Collections; 
using System.ComponentModel;
using System.ComponentModel.Design.Serialization; 
using System.Reflection;
using System.Diagnostics;
using System.Globalization;
using Microsoft.Win32.SafeHandles; 
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID; 
using UnsafeNativeMethodsMilCoreApi=MS.Win32.PresentationCore.UnsafeNativeMethods; 

namespace System.Windows.Media 
{
    #region SafeProfileHandle

    internal class SafeProfileHandle : SafeHandleZeroOrMinusOneIsInvalid 
    {
        ///  
        /// Use this constructor if the handle exists at construction time. 
        /// 
        ///  
        ///    Critical: The ctor of the base class requires SecurityPermission
        /// 
        [SecurityCritical]
        internal SafeProfileHandle() 
            : base(true)
        { 
        } 

        ///  
        /// Use this constructor if the handle exists at construction time.
        /// 
        /// 
        ///    Critical: The ctor of the base class requires SecurityPermission 
        ///              This code calls SetHandle
        ///  
        [SecurityCritical] 
        internal SafeProfileHandle(IntPtr profile)
            : base(true) 
        {
            SetHandle(profile);
        }
 
        /// 
        /// Critical - calls unmanaged code, not treat as safe because you must 
        ///            validate that handle is a valid color context handle. 
        /// 
        [SecurityCritical] 
        protected override bool ReleaseHandle()
        {
            return UnsafeNativeMethodsMilCoreApi.Mscms.CloseColorProfile(handle);
        } 
    }
 
    #endregion 

    #region ColorContextHelper 

    /// 
    /// Helper struct to call into MSCMS color context APIs
    ///  
    internal struct ColorContextHelper
    { 
        /// Opens a color profile. 
        ///
        /// NOTE: This may fail. It is up to the caller to handle it by checking IsInvalid. 
        ///
        /// 
        /// SecurityCritical: Calls unmanaged code, accepts InPtr/unverified data.
        ///  
        [SecurityCritical]
        internal void OpenColorProfile(ref UnsafeNativeMethods.PROFILE profile) 
        { 
            // No need to get rid of the old handle as it will get GC'ed
            _profileHandle = UnsafeNativeMethodsMilCoreApi.Mscms.OpenColorProfile( 
                ref profile,
                NativeMethods.PROFILE_READ,     // DesiredAccess
                NativeMethods.FILE_SHARE_READ,  // ShareMode
                NativeMethods.OPEN_EXISTING     // CreationMode 
                );
        } 
 
        /// Retrieves the profile header
        /// 
        ///
        /// NOTE: This may fail. It is up to the caller to handle it by checking the bool.
        ///
        ///  
        /// SecurityCritical: Calls unmanaged code, accepts InPtr/unverified data.
        ///  
        [SecurityCritical] 
        internal bool GetColorProfileHeader(out UnsafeNativeMethods.PROFILEHEADER header)
        { 
            if (IsInvalid)
            {
                throw new InvalidOperationException(SR.Get(SRID.Image_ColorContextInvalid));
            } 

            return UnsafeNativeMethodsMilCoreApi.Mscms.GetColorProfileHeader(_profileHandle, out header); 
        } 

        /// Retrieves the color profile from handle 
        /// 
        /// SecurityCritical: Calls unmanaged code, accepts InPtr/unverified data.
        /// 
        [SecurityCritical] 
        internal void GetColorProfileFromHandle(byte[] buffer, ref uint bufferSize)
        { 
            Invariant.Assert(buffer == null || bufferSize <= buffer.Length); 

            if (IsInvalid) 
            {
                throw new InvalidOperationException(SR.Get(SRID.Image_ColorContextInvalid));
            }
 
            // If the buffer is null, this function will return FALSE because it didn't actually copy anything. That's fine and that's
            // what we want. 
            if (!UnsafeNativeMethodsMilCoreApi.Mscms.GetColorProfileFromHandle(_profileHandle, buffer, ref bufferSize) && buffer != null) 
            {
                HRESULT.Check(Marshal.GetHRForLastWin32Error()); 
            }
        }

        ///  
        /// Critical - Accesses critical resource _profileHandle
        /// TreatAsSafe - No inputs and just checks if SafeHandle is valid or not. 
        ///  
        internal bool IsInvalid
        { 
            [SecurityCritical, SecurityTreatAsSafe]
            get
            {
                return _profileHandle == null || _profileHandle.IsInvalid; 
            }
        } 
 
        /// 
        /// ProfileHandle 
        /// 
        /// 
        /// SecurityCritical: This comes out of an elevation needs to be critical and tracked.
        ///  
        internal SafeProfileHandle ProfileHandle
        { 
            [SecurityCritical] 
            get
            { 
                return _profileHandle;
            }
        }
 
        #region Data members
 
        ///  
        /// SecurityCritical: This comes out of an elevation needs to be critical and tracked.
        ///  
        [SecurityCritical]
        SafeProfileHandle _profileHandle;

        #endregion 
    }
 
    #endregion 
}

// 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