SafeLibraryHandle.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 / ndp / cdf / src / WCF / infocard / Client / System / IdentityModel / Selectors / SafeLibraryHandle.cs / 1305376 / SafeLibraryHandle.cs

                            //------------------------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------------------------
namespace System.IdentityModel.Selectors
{ 
    using System;
    using System.IO; 
    using System.Collections.Generic; 
    using System.Collections.ObjectModel;
    using System.ComponentModel; 
    using System.Runtime.InteropServices;
    using System.Runtime.ConstrainedExecution;
    using System.Runtime.CompilerServices;
    using Microsoft.InfoCards.Diagnostics; 
    using Microsoft.Win32;
    using System.Security.Permissions; 
    using Microsoft.Win32.SafeHandles; 

    // 
    // Summary:
    // A class to wrap a library handle for reliability.
    // When LoadLibrary returns, the runtime stores the resulting IntPtr
    // into the already created SafeLibraryHandle. The runtime guarantees that 
    // this operation is atomic, meaning that if the P/Invoke method successfully returns,
    // the IntPtr will be stored safely inside the SafeHandle. Once inside the SafeHandle, 
    // even if an asynchronous exception occurs and prevents LoadLibrary's SafeLibraryHandle return 
    // value from being stored, the relevant IntPtr is already stored within a managed object
    // whose critical finalizer will ensure its proper release. 
    //
    [ SecurityPermission( SecurityAction.LinkDemand, UnmanagedCode=true ) ]
    class SafeLibraryHandle : SafeHandleZeroOrMinusOneIsInvalid
    { 

        private SafeLibraryHandle() : base( true ) 
        { 

        } 

        protected override bool ReleaseHandle()
        {
            #pragma warning suppress 56523 
            return FreeLibrary( handle );
        } 
 

        [DllImport( "kernel32.dll", 
            CharSet = CharSet.Unicode,
            ExactSpelling = true,
            SetLastError = true,
            CallingConvention = CallingConvention.StdCall )] 
        internal static extern SafeLibraryHandle LoadLibraryW(
                    [MarshalAs( UnmanagedType.LPWStr )] 
                    string dllname ); 

 
        [DllImport( "kernel32.dll",
            CharSet = CharSet.Unicode,
            ExactSpelling = true,
            SetLastError = true, 
            CallingConvention = CallingConvention.StdCall )]
        internal static extern bool FreeLibrary( IntPtr hModule ); 
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

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