Merge pull request #2377 from joelmartinez/docs-multiassembly-extension-fix
[mono.git] / mcs / class / referencesource / mscorlib / system / security / safesecurityhandles.cs
1 // <OWNER>[....]</OWNER>
2 namespace Microsoft.Win32.SafeHandles {
3     using System;
4     using System.Runtime.CompilerServices;
5     using System.Runtime.InteropServices;
6     using System.Runtime.ConstrainedExecution;
7     using System.Runtime.Versioning;
8     using System.Security;
9
10     // Introduce this handle to replace internal SafeTokenHandle,
11     // which is mainly used to hold Windows thread or process access token
12     [SecurityCritical]
13     public sealed class SafeAccessTokenHandle : SafeHandle
14     {
15         private SafeAccessTokenHandle()
16             : base(IntPtr.Zero, true)
17         { }
18
19         // 0 is an Invalid Handle
20         public SafeAccessTokenHandle(IntPtr handle)
21             : base(IntPtr.Zero, true)
22         {
23             SetHandle(handle);
24         }
25
26         public static SafeAccessTokenHandle InvalidHandle
27         {
28             [SecurityCritical]
29             get { return new SafeAccessTokenHandle(IntPtr.Zero); }
30         }
31
32         public override bool IsInvalid
33         {
34             [SecurityCritical]
35             get { return handle == IntPtr.Zero || handle == new IntPtr(-1); }
36         }
37
38         [SecurityCritical]
39         protected override bool ReleaseHandle()
40         {
41             return Win32Native.CloseHandle(handle);
42         }
43     }
44
45 #if !FEATURE_PAL
46     [System.Security.SecurityCritical]  // auto-generated
47     internal sealed class SafeLsaLogonProcessHandle : SafeHandleZeroOrMinusOneIsInvalid {
48         private SafeLsaLogonProcessHandle() : base (true) {}
49
50         // 0 is an Invalid Handle
51         internal SafeLsaLogonProcessHandle(IntPtr handle) : base (true) {
52             SetHandle(handle);
53         }
54
55         internal static SafeLsaLogonProcessHandle InvalidHandle {
56             get { return new SafeLsaLogonProcessHandle(IntPtr.Zero); }
57         }
58
59         [System.Security.SecurityCritical]
60         override protected bool ReleaseHandle()
61         {
62             // LsaDeregisterLogonProcess returns an NTSTATUS
63             return Win32Native.LsaDeregisterLogonProcess(handle) >= 0;
64         }
65     }
66
67     [System.Security.SecurityCritical]  // auto-generated
68     internal sealed class SafeLsaMemoryHandle : SafeBuffer {
69         private SafeLsaMemoryHandle() : base(true) {}
70
71         // 0 is an Invalid Handle
72         internal SafeLsaMemoryHandle(IntPtr handle) : base (true) {
73             SetHandle(handle);
74         }
75
76         internal static SafeLsaMemoryHandle InvalidHandle {
77             get { return new SafeLsaMemoryHandle( IntPtr.Zero ); }
78         }
79
80         [System.Security.SecurityCritical]
81         override protected bool ReleaseHandle()
82         {
83             return Win32Native.LsaFreeMemory(handle) == 0;
84         }
85     }
86
87     [System.Security.SecurityCritical]  // auto-generated
88     internal sealed class SafeLsaPolicyHandle : SafeHandleZeroOrMinusOneIsInvalid {
89         private SafeLsaPolicyHandle() : base(true) {}
90
91         // 0 is an Invalid Handle
92         internal SafeLsaPolicyHandle(IntPtr handle) : base (true) {
93             SetHandle(handle);
94         }
95
96         internal static SafeLsaPolicyHandle InvalidHandle {
97             get { return new SafeLsaPolicyHandle( IntPtr.Zero ); }
98         }
99
100         [System.Security.SecurityCritical]
101         override protected bool ReleaseHandle()
102         {
103             return Win32Native.LsaClose(handle) == 0;
104         }
105     }
106
107     [System.Security.SecurityCritical]  // auto-generated
108     internal sealed class SafeLsaReturnBufferHandle : SafeBuffer {
109         private SafeLsaReturnBufferHandle() : base (true) {}
110
111         // 0 is an Invalid Handle
112         internal SafeLsaReturnBufferHandle(IntPtr handle) : base (true) {
113             SetHandle(handle);
114         }
115
116         internal static SafeLsaReturnBufferHandle InvalidHandle {
117             get { return new SafeLsaReturnBufferHandle(IntPtr.Zero); }
118         }
119
120         [System.Security.SecurityCritical]
121         override protected bool ReleaseHandle()
122         {
123             // LsaFreeReturnBuffer returns an NTSTATUS
124             return Win32Native.LsaFreeReturnBuffer(handle) >= 0;
125         }
126     }
127
128     [System.Security.SecurityCritical]  // auto-generated
129     internal sealed class SafeProcessHandle : SafeHandleZeroOrMinusOneIsInvalid {
130         private SafeProcessHandle() : base (true) {}
131
132         // 0 is an Invalid Handle
133         internal SafeProcessHandle(IntPtr handle) : base (true) {
134             SetHandle(handle);
135         }
136
137         internal static SafeProcessHandle InvalidHandle {
138             get { return new SafeProcessHandle(IntPtr.Zero); }
139         }
140
141         [System.Security.SecurityCritical]
142         [ResourceExposure(ResourceScope.None)]
143         [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
144         override protected bool ReleaseHandle()
145         {
146             return Win32Native.CloseHandle(handle);
147         }
148     }
149
150     [System.Security.SecurityCritical]  // auto-generated
151     internal sealed class SafeThreadHandle : SafeHandleZeroOrMinusOneIsInvalid {
152         private SafeThreadHandle() : base (true) {}
153
154         // 0 is an Invalid Handle
155         internal SafeThreadHandle(IntPtr handle) : base (true) {
156             SetHandle(handle);
157         }
158
159         [System.Security.SecurityCritical]
160         [ResourceExposure(ResourceScope.None)]
161         [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
162         override protected bool ReleaseHandle()
163         {
164             return Win32Native.CloseHandle(handle);
165         }
166     }
167
168 #endif // !FEATURE_PAL
169 }