3 // Copyright (c) Microsoft Corporation. All rights reserved.
6 /*============================================================
8 ** Class: SafeLocalMemHandle
10 ** <EMAIL>Author: David Gutierrez (Microsoft) </EMAIL>
12 ** A wrapper for handle to local memory
16 ===========================================================*/
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;
28 namespace Microsoft.Win32.SafeHandles {
29 [HostProtectionAttribute(MayLeakOnAbort = true)]
30 [SuppressUnmanagedCodeSecurityAttribute]
31 internal sealed class SafeLocalMemHandle : SafeHandleZeroOrMinusOneIsInvalid
33 internal SafeLocalMemHandle() : base(true) {}
35 [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode=true)]
36 internal SafeLocalMemHandle(IntPtr existingHandle, bool ownsHandle) : base(ownsHandle) {
37 SetHandle(existingHandle);
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);
45 [DllImport(ExternDll.Kernel32)]
46 [ResourceExposure(ResourceScope.None)]
47 [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
48 private static extern IntPtr LocalFree(IntPtr hMem);
50 override protected bool ReleaseHandle()
52 return LocalFree(handle) == IntPtr.Zero;