1 // <OWNER>[....]</OWNER>
2 namespace Microsoft.Win32.SafeHandles {
4 using System.Runtime.CompilerServices;
5 using System.Runtime.InteropServices;
6 using System.Runtime.ConstrainedExecution;
7 using System.Runtime.Versioning;
10 // Introduce this handle to replace internal SafeTokenHandle,
11 // which is mainly used to hold Windows thread or process access token
13 public sealed class SafeAccessTokenHandle : SafeHandle
15 private SafeAccessTokenHandle()
16 : base(IntPtr.Zero, true)
19 // 0 is an Invalid Handle
20 public SafeAccessTokenHandle(IntPtr handle)
21 : base(IntPtr.Zero, true)
26 public static SafeAccessTokenHandle InvalidHandle
29 get { return new SafeAccessTokenHandle(IntPtr.Zero); }
32 public override bool IsInvalid
35 get { return handle == IntPtr.Zero || handle == new IntPtr(-1); }
39 protected override bool ReleaseHandle()
44 return Win32Native.CloseHandle(handle);
50 [System.Security.SecurityCritical] // auto-generated
51 internal sealed class SafeLsaLogonProcessHandle : SafeHandleZeroOrMinusOneIsInvalid {
52 private SafeLsaLogonProcessHandle() : base (true) {}
54 // 0 is an Invalid Handle
55 internal SafeLsaLogonProcessHandle(IntPtr handle) : base (true) {
59 internal static SafeLsaLogonProcessHandle InvalidHandle {
60 get { return new SafeLsaLogonProcessHandle(IntPtr.Zero); }
63 [System.Security.SecurityCritical]
64 override protected bool ReleaseHandle()
66 // LsaDeregisterLogonProcess returns an NTSTATUS
67 return Win32Native.LsaDeregisterLogonProcess(handle) >= 0;
71 [System.Security.SecurityCritical] // auto-generated
72 internal sealed class SafeLsaMemoryHandle : SafeBuffer {
73 private SafeLsaMemoryHandle() : base(true) {}
75 // 0 is an Invalid Handle
76 internal SafeLsaMemoryHandle(IntPtr handle) : base (true) {
80 internal static SafeLsaMemoryHandle InvalidHandle {
81 get { return new SafeLsaMemoryHandle( IntPtr.Zero ); }
84 [System.Security.SecurityCritical]
85 override protected bool ReleaseHandle()
87 return Win32Native.LsaFreeMemory(handle) == 0;
91 [System.Security.SecurityCritical] // auto-generated
92 internal sealed class SafeLsaPolicyHandle : SafeHandleZeroOrMinusOneIsInvalid {
93 private SafeLsaPolicyHandle() : base(true) {}
95 // 0 is an Invalid Handle
96 internal SafeLsaPolicyHandle(IntPtr handle) : base (true) {
100 internal static SafeLsaPolicyHandle InvalidHandle {
101 get { return new SafeLsaPolicyHandle( IntPtr.Zero ); }
104 [System.Security.SecurityCritical]
105 override protected bool ReleaseHandle()
107 return Win32Native.LsaClose(handle) == 0;
111 [System.Security.SecurityCritical] // auto-generated
112 internal sealed class SafeLsaReturnBufferHandle : SafeBuffer {
113 private SafeLsaReturnBufferHandle() : base (true) {}
115 // 0 is an Invalid Handle
116 internal SafeLsaReturnBufferHandle(IntPtr handle) : base (true) {
120 internal static SafeLsaReturnBufferHandle InvalidHandle {
121 get { return new SafeLsaReturnBufferHandle(IntPtr.Zero); }
124 [System.Security.SecurityCritical]
125 override protected bool ReleaseHandle()
127 // LsaFreeReturnBuffer returns an NTSTATUS
128 return Win32Native.LsaFreeReturnBuffer(handle) >= 0;
132 [System.Security.SecurityCritical] // auto-generated
133 internal sealed class SafeProcessHandle : SafeHandleZeroOrMinusOneIsInvalid {
134 private SafeProcessHandle() : base (true) {}
136 // 0 is an Invalid Handle
137 internal SafeProcessHandle(IntPtr handle) : base (true) {
141 internal static SafeProcessHandle InvalidHandle {
142 get { return new SafeProcessHandle(IntPtr.Zero); }
145 [System.Security.SecurityCritical]
146 [ResourceExposure(ResourceScope.None)]
147 [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
148 override protected bool ReleaseHandle()
150 return Win32Native.CloseHandle(handle);
154 [System.Security.SecurityCritical] // auto-generated
155 internal sealed class SafeThreadHandle : SafeHandleZeroOrMinusOneIsInvalid {
156 private SafeThreadHandle() : base (true) {}
158 // 0 is an Invalid Handle
159 internal SafeThreadHandle(IntPtr handle) : base (true) {
163 [System.Security.SecurityCritical]
164 [ResourceExposure(ResourceScope.None)]
165 [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
166 override protected bool ReleaseHandle()
168 return Win32Native.CloseHandle(handle);
172 #endif // !FEATURE_PAL