Utilities.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 / Base / MS / Internal / Utilities.cs / 1305600 / Utilities.cs

                            /**************************************************************************\ 
    Copyright Microsoft Corporation. All Rights Reserved.
\**************************************************************************/

namespace MS.Internal 
{
    using System; 
    using System.Diagnostics; 
    using System.Runtime.InteropServices;
    using System.Security; 
    using MS.Win32;

    /// 
    /// General utility class for macro-type functions. 
    /// 
    internal static class Utilities 
    { 
        private static readonly Version _osVersion = Environment.OSVersion.Version;
 
        internal static bool IsOSVistaOrNewer
        {
            get { return _osVersion >= new Version(6, 0); }
        } 

        internal static bool IsOSWindows7OrNewer 
        { 
            get { return _osVersion >= new Version(6, 1); }
        } 

        internal static bool IsCompositionEnabled
        {
            ///  
            /// Critical -- calls into an unsafe native method.
            /// TreatAsSafe -- the call to DwmIsCompositionEnabled simply returns a boolean 
            ///                through an out parameter, it is safe information to expose 
            /// 
            [SecurityCritical, SecurityTreatAsSafe] 
            get
            {
                if (!IsOSVistaOrNewer)
                { 
                    return false;
                } 
 
                Int32 isDesktopCompositionEnabled = 0;
                UnsafeNativeMethods.HRESULT.Check(UnsafeNativeMethods.DwmIsCompositionEnabled(out isDesktopCompositionEnabled)); 
                return isDesktopCompositionEnabled != 0;
            }
        }
 
        internal static void SafeDispose(ref T disposable) where T : IDisposable
        { 
            // Dispose can safely be called on an object multiple times. 
            IDisposable t = disposable;
            disposable = default(T); 
            if (null != t)
            {
                t.Dispose();
            } 
        }
 
        ///  
        /// Critical - Suppresses unmanaged code security.  Calls Marshal.ReleaseComObject which has a LinkDemand.
        ///  
        [SuppressUnmanagedCodeSecurity, SecurityCritical]
        internal static void SafeRelease(ref T comObject) where T : class
        {
            T t = comObject; 
            comObject = default(T);
            if (null != t) 
            { 
                Debug.Assert(Marshal.IsComObject(t));
                Marshal.ReleaseComObject(t); 
            }
        }
    }
} 

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