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()
41 return Win32Native.CloseHandle(handle);
46 [System.Security.SecurityCritical] // auto-generated
47 internal sealed class SafeLsaLogonProcessHandle : SafeHandleZeroOrMinusOneIsInvalid {
48 private SafeLsaLogonProcessHandle() : base (true) {}
50 // 0 is an Invalid Handle
51 internal SafeLsaLogonProcessHandle(IntPtr handle) : base (true) {
55 internal static SafeLsaLogonProcessHandle InvalidHandle {
56 get { return new SafeLsaLogonProcessHandle(IntPtr.Zero); }
59 [System.Security.SecurityCritical]
60 override protected bool ReleaseHandle()
62 // LsaDeregisterLogonProcess returns an NTSTATUS
63 return Win32Native.LsaDeregisterLogonProcess(handle) >= 0;
67 [System.Security.SecurityCritical] // auto-generated
68 internal sealed class SafeLsaMemoryHandle : SafeBuffer {
69 private SafeLsaMemoryHandle() : base(true) {}
71 // 0 is an Invalid Handle
72 internal SafeLsaMemoryHandle(IntPtr handle) : base (true) {
76 internal static SafeLsaMemoryHandle InvalidHandle {
77 get { return new SafeLsaMemoryHandle( IntPtr.Zero ); }
80 [System.Security.SecurityCritical]
81 override protected bool ReleaseHandle()
83 return Win32Native.LsaFreeMemory(handle) == 0;
87 [System.Security.SecurityCritical] // auto-generated
88 internal sealed class SafeLsaPolicyHandle : SafeHandleZeroOrMinusOneIsInvalid {
89 private SafeLsaPolicyHandle() : base(true) {}
91 // 0 is an Invalid Handle
92 internal SafeLsaPolicyHandle(IntPtr handle) : base (true) {
96 internal static SafeLsaPolicyHandle InvalidHandle {
97 get { return new SafeLsaPolicyHandle( IntPtr.Zero ); }
100 [System.Security.SecurityCritical]
101 override protected bool ReleaseHandle()
103 return Win32Native.LsaClose(handle) == 0;
107 [System.Security.SecurityCritical] // auto-generated
108 internal sealed class SafeLsaReturnBufferHandle : SafeBuffer {
109 private SafeLsaReturnBufferHandle() : base (true) {}
111 // 0 is an Invalid Handle
112 internal SafeLsaReturnBufferHandle(IntPtr handle) : base (true) {
116 internal static SafeLsaReturnBufferHandle InvalidHandle {
117 get { return new SafeLsaReturnBufferHandle(IntPtr.Zero); }
120 [System.Security.SecurityCritical]
121 override protected bool ReleaseHandle()
123 // LsaFreeReturnBuffer returns an NTSTATUS
124 return Win32Native.LsaFreeReturnBuffer(handle) >= 0;
128 [System.Security.SecurityCritical] // auto-generated
129 internal sealed class SafeProcessHandle : SafeHandleZeroOrMinusOneIsInvalid {
130 private SafeProcessHandle() : base (true) {}
132 // 0 is an Invalid Handle
133 internal SafeProcessHandle(IntPtr handle) : base (true) {
137 internal static SafeProcessHandle InvalidHandle {
138 get { return new SafeProcessHandle(IntPtr.Zero); }
141 [System.Security.SecurityCritical]
142 [ResourceExposure(ResourceScope.None)]
143 [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
144 override protected bool ReleaseHandle()
146 return Win32Native.CloseHandle(handle);
150 [System.Security.SecurityCritical] // auto-generated
151 internal sealed class SafeThreadHandle : SafeHandleZeroOrMinusOneIsInvalid {
152 private SafeThreadHandle() : base (true) {}
154 // 0 is an Invalid Handle
155 internal SafeThreadHandle(IntPtr handle) : base (true) {
159 [System.Security.SecurityCritical]
160 [ResourceExposure(ResourceScope.None)]
161 [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
162 override protected bool ReleaseHandle()
164 return Win32Native.CloseHandle(handle);
168 #endif // !FEATURE_PAL