Updates referencesource to .NET 4.7
[mono.git] / mcs / class / referencesource / System / compmod / microsoft / win32 / safehandles / SafeLocalMemHandle.cs
1 // ==++==
2 // 
3 //   Copyright (c) Microsoft Corporation.  All rights reserved.
4 // 
5 // ==--==
6 /*============================================================
7 **
8 ** Class:  SafeLocalMemHandle
9 **
10 ** <EMAIL>Author: David Gutierrez (Microsoft) </EMAIL>
11 **
12 ** A wrapper for handle to local memory
13 **
14 ** Date:  July 8, 2002
15 ** 
16 ===========================================================*/
17
18 using System;
19 using System.Security;
20 using System.Security.Permissions;
21 using System.Runtime.InteropServices;
22 using System.Runtime.CompilerServices;
23 using Microsoft.Win32;
24 using Microsoft.Win32.SafeHandles;
25 using System.Runtime.ConstrainedExecution;
26 using System.Runtime.Versioning;
27
28 namespace Microsoft.Win32.SafeHandles {
29     [HostProtectionAttribute(MayLeakOnAbort = true)]
30     [SuppressUnmanagedCodeSecurityAttribute]
31     internal sealed class SafeLocalMemHandle : SafeHandleZeroOrMinusOneIsInvalid
32     { 
33         internal SafeLocalMemHandle() : base(true) {}
34         
35         [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode=true)]
36         internal SafeLocalMemHandle(IntPtr existingHandle, bool ownsHandle) : base(ownsHandle) {
37             SetHandle(existingHandle);
38         }
39
40
41         [DllImport(ExternDll.Advapi32, CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true, BestFitMapping=false)]
42         [ResourceExposure(ResourceScope.None)]
43         internal static extern unsafe bool ConvertStringSecurityDescriptorToSecurityDescriptor(string StringSecurityDescriptor, int StringSDRevision, out SafeLocalMemHandle pSecurityDescriptor, IntPtr SecurityDescriptorSize);
44
45         [DllImport(ExternDll.Kernel32)]
46         [ResourceExposure(ResourceScope.None)]
47         [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
48         private static extern IntPtr LocalFree(IntPtr hMem);
49
50         override protected bool ReleaseHandle()
51         {
52             return LocalFree(handle) == IntPtr.Zero;
53         }
54
55     }
56 }
57
58
59
60
61