mscorlib(4.0.0.0) API with additions
UIPermission.cs
2 using System.Security.Util;
3 
5 {
8  [ComVisible(true)]
9  public sealed class UIPermission : CodeAccessPermission, IUnrestrictedPermission, IBuiltInPermission
10  {
11  private UIPermissionWindow m_windowFlag;
12 
13  private UIPermissionClipboard m_clipboardFlag;
14 
18  {
19  get
20  {
21  return m_windowFlag;
22  }
23  set
24  {
25  VerifyWindowFlag(value);
26  m_windowFlag = value;
27  }
28  }
29 
33  {
34  get
35  {
36  return m_clipboardFlag;
37  }
38  set
39  {
40  VerifyClipboardFlag(value);
41  m_clipboardFlag = value;
42  }
43  }
44 
49  {
50  switch (state)
51  {
52  case PermissionState.Unrestricted:
53  SetUnrestricted(unrestricted: true);
54  break;
55  case PermissionState.None:
56  SetUnrestricted(unrestricted: false);
57  Reset();
58  break;
59  default:
60  throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
61  }
62  }
63 
68  public UIPermission(UIPermissionWindow windowFlag, UIPermissionClipboard clipboardFlag)
69  {
70  VerifyWindowFlag(windowFlag);
71  VerifyClipboardFlag(clipboardFlag);
72  m_windowFlag = windowFlag;
73  m_clipboardFlag = clipboardFlag;
74  }
75 
79  public UIPermission(UIPermissionWindow windowFlag)
80  {
81  VerifyWindowFlag(windowFlag);
82  m_windowFlag = windowFlag;
83  }
84 
88  public UIPermission(UIPermissionClipboard clipboardFlag)
89  {
90  VerifyClipboardFlag(clipboardFlag);
91  m_clipboardFlag = clipboardFlag;
92  }
93 
94  private static void VerifyWindowFlag(UIPermissionWindow flag)
95  {
96  if (flag < UIPermissionWindow.NoWindows || flag > UIPermissionWindow.AllWindows)
97  {
98  throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)flag));
99  }
100  }
101 
102  private static void VerifyClipboardFlag(UIPermissionClipboard flag)
103  {
104  if (flag < UIPermissionClipboard.NoClipboard || flag > UIPermissionClipboard.AllClipboard)
105  {
106  throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)flag));
107  }
108  }
109 
110  private void Reset()
111  {
112  m_windowFlag = UIPermissionWindow.NoWindows;
113  m_clipboardFlag = UIPermissionClipboard.NoClipboard;
114  }
115 
116  private void SetUnrestricted(bool unrestricted)
117  {
118  if (unrestricted)
119  {
120  m_windowFlag = UIPermissionWindow.AllWindows;
121  m_clipboardFlag = UIPermissionClipboard.AllClipboard;
122  }
123  }
124 
128  public bool IsUnrestricted()
129  {
130  if (m_windowFlag == UIPermissionWindow.AllWindows)
131  {
132  return m_clipboardFlag == UIPermissionClipboard.AllClipboard;
133  }
134  return false;
135  }
136 
142  public override bool IsSubsetOf(IPermission target)
143  {
144  if (target == null)
145  {
146  if (m_windowFlag == UIPermissionWindow.NoWindows)
147  {
148  return m_clipboardFlag == UIPermissionClipboard.NoClipboard;
149  }
150  return false;
151  }
152  try
153  {
154  UIPermission uIPermission = (UIPermission)target;
155  if (uIPermission.IsUnrestricted())
156  {
157  return true;
158  }
159  if (IsUnrestricted())
160  {
161  return false;
162  }
163  return m_windowFlag <= uIPermission.m_windowFlag && m_clipboardFlag <= uIPermission.m_clipboardFlag;
164  }
165  catch (InvalidCastException)
166  {
167  throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", GetType().FullName));
168  }
169  }
170 
175  public override IPermission Intersect(IPermission target)
176  {
177  if (target == null)
178  {
179  return null;
180  }
181  if (!VerifyType(target))
182  {
183  throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", GetType().FullName));
184  }
185  UIPermission uIPermission = (UIPermission)target;
186  UIPermissionWindow uIPermissionWindow = (m_windowFlag < uIPermission.m_windowFlag) ? m_windowFlag : uIPermission.m_windowFlag;
187  UIPermissionClipboard uIPermissionClipboard = (m_clipboardFlag < uIPermission.m_clipboardFlag) ? m_clipboardFlag : uIPermission.m_clipboardFlag;
188  if (uIPermissionWindow == UIPermissionWindow.NoWindows && uIPermissionClipboard == UIPermissionClipboard.NoClipboard)
189  {
190  return null;
191  }
192  return new UIPermission(uIPermissionWindow, uIPermissionClipboard);
193  }
194 
199  public override IPermission Union(IPermission target)
200  {
201  if (target == null)
202  {
203  return Copy();
204  }
205  if (!VerifyType(target))
206  {
207  throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", GetType().FullName));
208  }
209  UIPermission uIPermission = (UIPermission)target;
210  UIPermissionWindow uIPermissionWindow = (m_windowFlag > uIPermission.m_windowFlag) ? m_windowFlag : uIPermission.m_windowFlag;
211  UIPermissionClipboard uIPermissionClipboard = (m_clipboardFlag > uIPermission.m_clipboardFlag) ? m_clipboardFlag : uIPermission.m_clipboardFlag;
212  if (uIPermissionWindow == UIPermissionWindow.NoWindows && uIPermissionClipboard == UIPermissionClipboard.NoClipboard)
213  {
214  return null;
215  }
216  return new UIPermission(uIPermissionWindow, uIPermissionClipboard);
217  }
218 
221  public override IPermission Copy()
222  {
223  return new UIPermission(m_windowFlag, m_clipboardFlag);
224  }
225 
228  public override SecurityElement ToXml()
229  {
230  SecurityElement securityElement = CodeAccessPermission.CreatePermissionElement(this, "System.Security.Permissions.UIPermission");
231  if (!IsUnrestricted())
232  {
233  if (m_windowFlag != 0)
234  {
235  securityElement.AddAttribute("Window", Enum.GetName(typeof(UIPermissionWindow), m_windowFlag));
236  }
237  if (m_clipboardFlag != 0)
238  {
239  securityElement.AddAttribute("Clipboard", Enum.GetName(typeof(UIPermissionClipboard), m_clipboardFlag));
240  }
241  }
242  else
243  {
244  securityElement.AddAttribute("Unrestricted", "true");
245  }
246  return securityElement;
247  }
248 
253  public override void FromXml(SecurityElement esd)
254  {
255  CodeAccessPermission.ValidateElement(esd, this);
256  if (XMLUtil.IsUnrestricted(esd))
257  {
258  SetUnrestricted(unrestricted: true);
259  return;
260  }
261  m_windowFlag = UIPermissionWindow.NoWindows;
262  m_clipboardFlag = UIPermissionClipboard.NoClipboard;
263  string text = esd.Attribute("Window");
264  if (text != null)
265  {
266  m_windowFlag = (UIPermissionWindow)Enum.Parse(typeof(UIPermissionWindow), text);
267  }
268  string text2 = esd.Attribute("Clipboard");
269  if (text2 != null)
270  {
271  m_clipboardFlag = (UIPermissionClipboard)Enum.Parse(typeof(UIPermissionClipboard), text2);
272  }
273  }
274 
275  int IBuiltInPermission.GetTokenIndex()
276  {
277  return GetTokenIndex();
278  }
279 
280  internal static int GetTokenIndex()
281  {
282  return 7;
283  }
284  }
285 }
static string GetName(Type enumType, object value)
Retrieves the name of the constant in the specified enumeration that has the specified value.
Definition: Enum.cs:482
Allows a permission to expose an unrestricted state.
UIPermission(UIPermissionWindow windowFlag, UIPermissionClipboard clipboardFlag)
Initializes a new instance of the T:System.Security.Permissions.UIPermission class with the specified...
Definition: UIPermission.cs:68
override bool IsSubsetOf(IPermission target)
Determines whether the current permission is a subset of the specified permission.
Definition: __Canon.cs:3
The exception that is thrown for invalid casting or explicit conversion.
UIPermissionWindow
Specifies the type of windows that code is allowed to use.
override void FromXml(SecurityElement esd)
Reconstructs a permission with a specified state from an XML encoding.
override IPermission Copy()
Creates and returns an identical copy of the current permission.
UIPermissionWindow Window
Gets or sets the window access represented by the permission.
Definition: UIPermission.cs:18
static object Parse(Type enumType, string value)
Converts the string representation of the name or numeric value of one or more enumerated constants t...
Definition: Enum.cs:298
UIPermission(UIPermissionWindow windowFlag)
Initializes a new instance of the T:System.Security.Permissions.UIPermission class with the permissio...
Definition: UIPermission.cs:79
Provides information about, and means to manipulate, the current environment and platform....
Definition: Environment.cs:21
UIPermission(UIPermissionClipboard clipboardFlag)
Initializes a new instance of the T:System.Security.Permissions.UIPermission class with the permissio...
Definition: UIPermission.cs:88
Provides the base class for enumerations.
Definition: Enum.cs:14
Represents the XML object model for encoding security objects. This class cannot be inherited.
bool IsUnrestricted()
Returns a value indicating whether the current permission is unrestricted.
override IPermission Union(IPermission target)
Creates a permission that is the union of the permission and the specified permission.
Controls the permissions related to user interfaces and the Clipboard. This class cannot be inherited...
Definition: UIPermission.cs:9
UIPermission(PermissionState state)
Initializes a new instance of the T:System.Security.Permissions.UIPermission class with either fully ...
Definition: UIPermission.cs:48
Defines the underlying structure of all code access permissions.
override IPermission Intersect(IPermission target)
Creates and returns a permission that is the intersection of the current permission and the specified...
Defines methods implemented by permission types.
Definition: IPermission.cs:7
The exception that is thrown when one of the arguments provided to a method is not valid.
override SecurityElement ToXml()
Creates an XML encoding of the permission and its current state.
PermissionState
Specifies whether a permission should have all or no access to resources at creation.
void AddAttribute(string name, string value)
Adds a name/value attribute to an XML element.
Specifies that the class can be serialized.
UIPermissionClipboard
Specifies the type of clipboard access that is allowed to the calling code.
UIPermissionClipboard Clipboard
Gets or sets the Clipboard access represented by the permission.
Definition: UIPermission.cs:33