3 // Copyright (c) Microsoft Corporation. All rights reserved.
6 // NamedPermissionSet.cs
8 // <OWNER>Microsoft</OWNER>
10 // Extends PermissionSet to allow an associated name and description
13 namespace System
.Security
{
16 using System
.Security
.Util
;
17 using System
.Security
.Permissions
;
18 using System
.Runtime
.Serialization
;
19 using System
.Diagnostics
.Contracts
;
21 #if !FEATURE_CAS_POLICY
22 using Microsoft
.Win32
;
23 using System
.Collections
;
24 using System
.Globalization
;
26 using System
.Reflection
;
27 using System
.Runtime
.InteropServices
;
28 using System
.Runtime
.Remoting
;
29 using System
.Runtime
.Versioning
;
32 #else // FEATURE_CAS_POLICY
34 using System
.Threading
;
36 #endif // FEATURE_CAS_POLICY
39 [System
.Runtime
.InteropServices
.ComVisible(true)]
40 public sealed class NamedPermissionSet
: PermissionSet
42 #if FEATURE_CAS_POLICY
43 // The name of this PermissionSet
44 private String m_name
;
46 // The description of this PermissionSet
47 private String m_description
;
48 [OptionalField(VersionAdded
= 2)]
49 internal String m_descrResource
;
51 internal NamedPermissionSet()
56 public NamedPermissionSet( String name
)
63 public NamedPermissionSet( String name
, PermissionState state
)
71 public NamedPermissionSet( String name
, PermissionSet permSet
)
78 public NamedPermissionSet( NamedPermissionSet permSet
)
81 m_name
= permSet
.m_name
;
82 m_description
= permSet
.Description
;
85 internal NamedPermissionSet(SecurityElement permissionSetXml
)
86 : base(PermissionState
.None
)
88 Contract
.Assert(permissionSetXml
!= null);
89 FromXml(permissionSetXml
);
93 get { return m_name; }
94 set { CheckName( value ); m_name = value; }
97 private static void CheckName( String name
)
99 if (name
== null || name
.Equals( "" ))
100 throw new ArgumentException( Environment
.GetResourceString( "Argument_NPMSInvalidName" ));
101 Contract
.EndContractBlock();
104 public String Description
{
107 if(m_descrResource
!= null)
109 m_description
= Environment
.GetResourceString(m_descrResource
);
110 m_descrResource
= null;
112 return m_description
;
117 m_description
= value;
118 m_descrResource
= null;
122 public override PermissionSet
Copy()
124 return new NamedPermissionSet( this );
127 public NamedPermissionSet
Copy( String name
)
129 NamedPermissionSet
set = new NamedPermissionSet( this );
134 public override SecurityElement
ToXml()
136 SecurityElement elem
= base.ToXml("System.Security.NamedPermissionSet");
137 // If you hit this assert then most likely you are trying to change the name of this class.
138 // This is ok as long as you change the hard coded string above and change the assert below.
139 Contract
.Assert( this.GetType().FullName
.Equals( "System.Security.NamedPermissionSet" ), "Class name changed!" );
141 if (m_name
!= null && !m_name
.Equals( "" ))
143 elem
.AddAttribute( "Name", SecurityElement
.Escape( m_name
) );
146 if (Description
!= null && !Description
.Equals( "" ))
148 elem
.AddAttribute( "Description", SecurityElement
.Escape( Description
) );
154 public override void FromXml( SecurityElement et
)
156 FromXml( et
, false, false );
159 internal override void FromXml( SecurityElement et
, bool allowInternalOnly
, bool ignoreTypeLoadFailures
)
162 throw new ArgumentNullException( "et" );
163 Contract
.EndContractBlock();
167 elem
= et
.Attribute( "Name" );
168 m_name
= elem
== null ? null : elem
;
170 elem
= et
.Attribute( "Description" );
171 m_description
= (elem
== null ? "" : elem
);
172 m_descrResource
= null;
174 base.FromXml( et
, allowInternalOnly
, ignoreTypeLoadFailures
);
177 internal void FromXmlNameOnly( SecurityElement et
)
179 // This function gets only the name for the permission set, ignoring all other info.
183 elem
= et
.Attribute( "Name" );
184 m_name
= (elem
== null ? null : elem
);
187 // NamedPermissionSet Equals should have the exact semantic as PermissionSet.
188 // We explicitly override them here to make sure that no one accidently
191 [System
.Runtime
.InteropServices
.ComVisible(false)]
192 public override bool Equals( Object obj
)
194 return base.Equals( obj
);
197 [System
.Runtime
.InteropServices
.ComVisible(false)]
198 public override int GetHashCode()
200 return base.GetHashCode();
203 private static Object s_InternalSyncObject
;
204 private static Object InternalSyncObject
{
206 if (s_InternalSyncObject
== null) {
207 Object o
= new Object();
208 Interlocked
.CompareExchange(ref s_InternalSyncObject
, o
, null);
210 return s_InternalSyncObject
;
213 #else // FEATURE_CAS_POLICY
215 internal static PermissionSet
GetBuiltInSet(string name
) {
216 // Used by PermissionSetAttribute to create one of the built-in,
217 // immutable permission sets.
221 else if (name
.Equals("FullTrust"))
222 return CreateFullTrustSet();
223 else if (name
.Equals("Nothing"))
224 return CreateNothingSet();
225 else if (name
.Equals("Execution"))
226 return CreateExecutionSet();
227 else if (name
.Equals("SkipVerification"))
228 return CreateSkipVerificationSet();
229 else if (name
.Equals("Internet"))
230 return CreateInternetSet();
235 private static PermissionSet
CreateFullTrustSet() {
236 return new PermissionSet(PermissionState
.Unrestricted
);
239 private static PermissionSet
CreateNothingSet() {
240 return new PermissionSet(PermissionState
.None
);
243 private static PermissionSet
CreateExecutionSet() {
244 PermissionSet permSet
= new PermissionSet(PermissionState
.None
);
245 #pragma warning disable 618
246 permSet
.AddPermission(new SecurityPermission(SecurityPermissionFlag
.Execution
));
247 #pragma warning restore 618
251 private static PermissionSet
CreateSkipVerificationSet() {
252 PermissionSet permSet
= new PermissionSet(PermissionState
.None
);
253 #pragma warning disable 618
254 permSet
.AddPermission(new SecurityPermission(SecurityPermissionFlag
.SkipVerification
));
255 #pragma warning restore 618
259 private static PermissionSet
CreateInternetSet() {
260 PermissionSet permSet
= new PermissionSet(PermissionState
.None
);
261 permSet
.AddPermission(new FileDialogPermission(FileDialogPermissionAccess
.Open
));
262 #pragma warning disable 618
263 permSet
.AddPermission(new SecurityPermission(SecurityPermissionFlag
.Execution
));
264 #pragma warning restore 618
265 permSet
.AddPermission(new UIPermission(UIPermissionWindow
.SafeTopLevelWindows
, UIPermissionClipboard
.OwnClipboard
));
270 #endif // !FEATURE_CAS_POLICY