SafeHandles.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 / fx / src / Services / Messaging / System / Messaging / Interop / SafeHandles.cs / 1305376 / SafeHandles.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Messaging.Interop { 
    using System; 
    using System.Runtime.InteropServices;
    using Microsoft.Win32.SafeHandles; 

    internal class MessageQueueHandle : SafeHandleZeroOrMinusOneIsInvalid   {

        public static readonly MessageQueueHandle InvalidHandle = new InvalidMessageQueueHandle(); 

        MessageQueueHandle() : base(true) {} 
 

        protected override bool ReleaseHandle() { 
            SafeNativeMethods.MQCloseQueue(this.handle);

            return true;
        } 

        public override bool IsInvalid { 
            get { return base.IsInvalid || IsClosed; } 
        }
 

        // A subclass needed to express InvalidHandle. The reason is that CLR notices that
        // ReleaseHandle requires a call to MQRT.DLL, and throws in the ctor if MQRT.DLL is not available,
        // even though CTOR ITSELF DOES NOT REQUIRE MQRT.DLL. 
        // We address this by defining a NOOP ReleaseHandle
        sealed class InvalidMessageQueueHandle : MessageQueueHandle  { 
 
            protected override bool ReleaseHandle() {
                return true; 
            }
        }
    }
 

    internal class CursorHandle : SafeHandleZeroOrMinusOneIsInvalid   { 
 
        public static readonly CursorHandle NullHandle = new InvalidCursorHandle();
 
        protected CursorHandle() : base(true) {}

        protected override bool ReleaseHandle() {
            SafeNativeMethods.MQCloseCursor(this.handle); 

            return true; 
        } 

        public override bool IsInvalid { 
            get { return base.IsInvalid || IsClosed; }
        }

 
        // A subclass needed to express InvalidHandle. The reason is that CLR notices that
        // ReleaseHandle requires a call to MQRT.DLL, and throws in the ctor if MQRT.DLL is not available, 
        // even though CTOR ITSELF DOES NOT REQUIRE MQRT.DLL. 
        // We address this by defining a NOOP ReleaseHandle
        sealed class InvalidCursorHandle : CursorHandle  { 

            protected override bool ReleaseHandle() {
                return true;
            } 
        }
    } 
 

    internal class LocatorHandle : SafeHandleZeroOrMinusOneIsInvalid   { 

        public static readonly LocatorHandle InvalidHandle = new InvalidLocatorHandle();

        protected LocatorHandle() : base(true) {} 

        protected override bool ReleaseHandle() { 
            SafeNativeMethods.MQLocateEnd(this.handle); 

            return true; 
        }

        public override bool IsInvalid
        { 
            get { return base.IsInvalid || IsClosed; }
        } 
 

        // A subclass needed to express InvalidHandle. The reason is that CLR notices that 
        // ReleaseHandle requires a call to MQRT.DLL, and throws in the ctor if MQRT.DLL is not available,
        // even though CTOR ITSELF DOES NOT REQUIRE MQRT.DLL.
        // We address this by defining a NOOP ReleaseHandle
        sealed class InvalidLocatorHandle : LocatorHandle  { 

            protected override bool ReleaseHandle() { 
                return true; 
            }
        } 
    }


 

    internal sealed class SecurityContextHandle : SafeHandleZeroOrMinusOneIsInvalid   { 
 
        internal SecurityContextHandle(IntPtr existingHandle) : base(true) {
            SetHandle(existingHandle); 
        }

        protected override bool ReleaseHandle() {
            SafeNativeMethods.MQFreeSecurityContext(this.handle); 

            return true; 
        } 

        public override bool IsInvalid { 
            get { return base.IsInvalid || IsClosed; }
        }
    }
} 


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