mscorlib(4.0.0.0) API with additions
PermissionSet.cs
1 using System.Collections;
2 using System.Diagnostics;
3 using System.IO;
4 using System.Reflection;
10 using System.Security.Util;
11 using System.Text;
12 using System.Threading;
13 
14 namespace System.Security
15 {
17  [Serializable]
18  [ComVisible(true)]
19  [StrongNameIdentityPermission(SecurityAction.InheritanceDemand, Name = "mscorlib", PublicKey = "0x00000000000000000400000000000000")]
21  {
22  internal enum IsSubsetOfType
23  {
24  Normal,
25  CheckDemand,
26  CheckPermitOnly,
27  CheckAssertion
28  }
29 
30  private bool m_Unrestricted;
31 
32  [OptionalField(VersionAdded = 2)]
33  private bool m_allPermissionsDecoded;
34 
35  [OptionalField(VersionAdded = 2)]
36  internal TokenBasedSet m_permSet;
37 
38  [OptionalField(VersionAdded = 2)]
39  private bool m_ignoreTypeLoadFailures;
40 
41  [OptionalField(VersionAdded = 2)]
42  private string m_serializedPermissionSet;
43 
44  [NonSerialized]
45  private bool m_CheckedForNonCas;
46 
47  [NonSerialized]
48  private bool m_ContainsCas;
49 
50  [NonSerialized]
51  private bool m_ContainsNonCas;
52 
53  [NonSerialized]
54  private TokenBasedSet m_permSetSaved;
55 
56  private bool readableonly;
57 
58  private TokenBasedSet m_unrestrictedPermSet;
59 
60  private TokenBasedSet m_normalPermSet;
61 
62  [OptionalField(VersionAdded = 2)]
63  private bool m_canUnrestrictedOverride;
64 
65  internal static readonly PermissionSet s_fullTrust = new PermissionSet(fUnrestricted: true);
66 
67  private const string s_str_PermissionSet = "PermissionSet";
68 
69  private const string s_str_Permission = "Permission";
70 
71  private const string s_str_IPermission = "IPermission";
72 
73  private const string s_str_Unrestricted = "Unrestricted";
74 
75  private const string s_str_PermissionUnion = "PermissionUnion";
76 
77  private const string s_str_PermissionIntersection = "PermissionIntersection";
78 
79  private const string s_str_PermissionUnrestrictedUnion = "PermissionUnrestrictedUnion";
80 
81  private const string s_str_PermissionUnrestrictedIntersection = "PermissionUnrestrictedIntersection";
82 
85  public virtual object SyncRoot => this;
86 
89  public virtual bool IsSynchronized => false;
90 
93  public virtual bool IsReadOnly => false;
94 
97  public virtual int Count
98  {
99  get
100  {
101  int num = 0;
102  if (m_permSet != null)
103  {
104  num += m_permSet.GetCount();
105  }
106  return num;
107  }
108  }
109 
110  internal bool IgnoreTypeLoadFailures
111  {
112  set
113  {
114  m_ignoreTypeLoadFailures = value;
115  }
116  }
117 
118  [Conditional("_DEBUG")]
119  private static void DEBUG_WRITE(string str)
120  {
121  }
122 
123  [Conditional("_DEBUG")]
124  private static void DEBUG_COND_WRITE(bool exp, string str)
125  {
126  }
127 
128  [Conditional("_DEBUG")]
129  private static void DEBUG_PRINTSTACK(Exception e)
130  {
131  }
132 
133  [OnDeserializing]
134  private void OnDeserializing(StreamingContext ctx)
135  {
136  Reset();
137  }
138 
139  [OnDeserialized]
140  private void OnDeserialized(StreamingContext ctx)
141  {
142  if (m_serializedPermissionSet != null)
143  {
144  FromXml(SecurityElement.FromString(m_serializedPermissionSet));
145  }
146  else if (m_normalPermSet != null)
147  {
148  m_permSet = m_normalPermSet.SpecialUnion(m_unrestrictedPermSet);
149  }
150  else if (m_unrestrictedPermSet != null)
151  {
152  m_permSet = m_unrestrictedPermSet.SpecialUnion(m_normalPermSet);
153  }
154  m_serializedPermissionSet = null;
155  m_normalPermSet = null;
156  m_unrestrictedPermSet = null;
157  }
158 
159  [OnSerializing]
160  private void OnSerializing(StreamingContext ctx)
161  {
162  if ((ctx.State & ~(StreamingContextStates.Clone | StreamingContextStates.CrossAppDomain)) != 0)
163  {
164  m_serializedPermissionSet = ToString();
165  if (m_permSet != null)
166  {
167  m_permSet.SpecialSplit(ref m_unrestrictedPermSet, ref m_normalPermSet, m_ignoreTypeLoadFailures);
168  }
169  m_permSetSaved = m_permSet;
170  m_permSet = null;
171  }
172  }
173 
174  [OnSerialized]
175  private void OnSerialized(StreamingContext context)
176  {
177  if ((context.State & ~(StreamingContextStates.Clone | StreamingContextStates.CrossAppDomain)) != 0)
178  {
179  m_serializedPermissionSet = null;
180  m_permSet = m_permSetSaved;
181  m_permSetSaved = null;
182  m_unrestrictedPermSet = null;
183  m_normalPermSet = null;
184  }
185  }
186 
187  internal PermissionSet()
188  {
189  Reset();
190  m_Unrestricted = true;
191  }
192 
193  internal PermissionSet(bool fUnrestricted)
194  : this()
195  {
196  SetUnrestricted(fUnrestricted);
197  }
198 
203  : this()
204  {
205  switch (state)
206  {
207  case PermissionState.Unrestricted:
208  SetUnrestricted(unrestricted: true);
209  break;
210  case PermissionState.None:
211  SetUnrestricted(unrestricted: false);
212  break;
213  default:
214  throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
215  }
216  }
217 
220  public PermissionSet(PermissionSet permSet)
221  : this()
222  {
223  if (permSet == null)
224  {
225  Reset();
226  return;
227  }
228  m_Unrestricted = permSet.m_Unrestricted;
229  m_CheckedForNonCas = permSet.m_CheckedForNonCas;
230  m_ContainsCas = permSet.m_ContainsCas;
231  m_ContainsNonCas = permSet.m_ContainsNonCas;
232  m_ignoreTypeLoadFailures = permSet.m_ignoreTypeLoadFailures;
233  if (permSet.m_permSet == null)
234  {
235  return;
236  }
237  m_permSet = new TokenBasedSet(permSet.m_permSet);
238  for (int i = m_permSet.GetStartingIndex(); i <= m_permSet.GetMaxUsedIndex(); i++)
239  {
240  object item = m_permSet.GetItem(i);
241  IPermission permission = item as IPermission;
242  ISecurityElementFactory securityElementFactory = item as ISecurityElementFactory;
243  if (permission != null)
244  {
245  m_permSet.SetItem(i, permission.Copy());
246  }
247  else if (securityElementFactory != null)
248  {
249  m_permSet.SetItem(i, securityElementFactory.Copy());
250  }
251  }
252  }
253 
260  public virtual void CopyTo(Array array, int index)
261  {
262  if (array == null)
263  {
264  throw new ArgumentNullException("array");
265  }
266  PermissionSetEnumeratorInternal permissionSetEnumeratorInternal = new PermissionSetEnumeratorInternal(this);
267  while (permissionSetEnumeratorInternal.MoveNext())
268  {
269  array.SetValue(permissionSetEnumeratorInternal.Current, index++);
270  }
271  }
272 
273  private PermissionSet(object trash, object junk)
274  {
275  m_Unrestricted = false;
276  }
277 
278  internal void Reset()
279  {
280  m_Unrestricted = false;
281  m_allPermissionsDecoded = true;
282  m_permSet = null;
283  m_ignoreTypeLoadFailures = false;
284  m_CheckedForNonCas = false;
285  m_ContainsCas = false;
286  m_ContainsNonCas = false;
287  m_permSetSaved = null;
288  }
289 
290  internal void CheckSet()
291  {
292  if (m_permSet == null)
293  {
294  m_permSet = new TokenBasedSet();
295  }
296  }
297 
301  public bool IsEmpty()
302  {
303  if (m_Unrestricted)
304  {
305  return false;
306  }
307  if (m_permSet == null || m_permSet.FastIsEmpty())
308  {
309  return true;
310  }
311  PermissionSetEnumeratorInternal permissionSetEnumeratorInternal = new PermissionSetEnumeratorInternal(this);
312  while (permissionSetEnumeratorInternal.MoveNext())
313  {
314  IPermission permission = (IPermission)permissionSetEnumeratorInternal.Current;
315  if (!permission.IsSubsetOf(null))
316  {
317  return false;
318  }
319  }
320  return true;
321  }
322 
323  internal bool FastIsEmpty()
324  {
325  if (m_Unrestricted)
326  {
327  return false;
328  }
329  if (m_permSet == null || m_permSet.FastIsEmpty())
330  {
331  return true;
332  }
333  return false;
334  }
335 
336  internal IPermission GetPermission(int index)
337  {
338  if (m_permSet == null)
339  {
340  return null;
341  }
342  object item = m_permSet.GetItem(index);
343  if (item == null)
344  {
345  return null;
346  }
347  IPermission permission = item as IPermission;
348  if (permission != null)
349  {
350  return permission;
351  }
352  permission = CreatePermission(item, index);
353  if (permission == null)
354  {
355  return null;
356  }
357  return permission;
358  }
359 
360  internal IPermission GetPermission(PermissionToken permToken)
361  {
362  if (permToken == null)
363  {
364  return null;
365  }
366  return GetPermission(permToken.m_index);
367  }
368 
369  internal IPermission GetPermission(IPermission perm)
370  {
371  if (perm == null)
372  {
373  return null;
374  }
375  return GetPermission(PermissionToken.GetToken(perm));
376  }
377 
381  public IPermission GetPermission(Type permClass)
382  {
383  return GetPermissionImpl(permClass);
384  }
385 
389  protected virtual IPermission GetPermissionImpl(Type permClass)
390  {
391  if (permClass == null)
392  {
393  return null;
394  }
395  return GetPermission(PermissionToken.FindToken(permClass));
396  }
397 
403  {
404  return SetPermissionImpl(perm);
405  }
406 
411  protected virtual IPermission SetPermissionImpl(IPermission perm)
412  {
413  if (perm == null)
414  {
415  return null;
416  }
417  PermissionToken token = PermissionToken.GetToken(perm);
418  if ((token.m_type & PermissionTokenType.IUnrestricted) != 0)
419  {
420  m_Unrestricted = false;
421  }
422  CheckSet();
423  IPermission permission = GetPermission(token.m_index);
424  m_CheckedForNonCas = false;
425  m_permSet.SetItem(token.m_index, perm);
426  return perm;
427  }
428 
434  {
435  return AddPermissionImpl(perm);
436  }
437 
442  protected virtual IPermission AddPermissionImpl(IPermission perm)
443  {
444  if (perm == null)
445  {
446  return null;
447  }
448  m_CheckedForNonCas = false;
449  PermissionToken token = PermissionToken.GetToken(perm);
450  if (IsUnrestricted() && (token.m_type & PermissionTokenType.IUnrestricted) != 0)
451  {
452  Type type = perm.GetType();
453  return (IPermission)Activator.CreateInstance(type, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public, null, new object[1]
454  {
455  PermissionState.Unrestricted
456  }, null);
457  }
458  CheckSet();
459  IPermission permission = GetPermission(token.m_index);
460  if (permission != null)
461  {
462  IPermission permission2 = permission.Union(perm);
463  m_permSet.SetItem(token.m_index, permission2);
464  return permission2;
465  }
466  m_permSet.SetItem(token.m_index, perm);
467  return perm;
468  }
469 
470  private IPermission RemovePermission(int index)
471  {
472  IPermission permission = GetPermission(index);
473  if (permission == null)
474  {
475  return null;
476  }
477  return (IPermission)m_permSet.RemoveItem(index);
478  }
479 
485  {
486  return RemovePermissionImpl(permClass);
487  }
488 
493  protected virtual IPermission RemovePermissionImpl(Type permClass)
494  {
495  if (permClass == null)
496  {
497  return null;
498  }
499  PermissionToken permissionToken = PermissionToken.FindToken(permClass);
500  if (permissionToken == null)
501  {
502  return null;
503  }
504  return RemovePermission(permissionToken.m_index);
505  }
506 
507  internal void SetUnrestricted(bool unrestricted)
508  {
509  m_Unrestricted = unrestricted;
510  if (unrestricted)
511  {
512  m_permSet = null;
513  }
514  }
515 
519  public bool IsUnrestricted()
520  {
521  return m_Unrestricted;
522  }
523 
524  internal bool IsSubsetOfHelper(PermissionSet target, IsSubsetOfType type, out IPermission firstPermThatFailed, bool ignoreNonCas)
525  {
526  firstPermThatFailed = null;
527  if (target == null || target.FastIsEmpty())
528  {
529  if (IsEmpty())
530  {
531  return true;
532  }
533  firstPermThatFailed = GetFirstPerm();
534  return false;
535  }
536  if (IsUnrestricted() && !target.IsUnrestricted())
537  {
538  return false;
539  }
540  if (m_permSet == null)
541  {
542  return true;
543  }
544  target.CheckSet();
545  for (int i = m_permSet.GetStartingIndex(); i <= m_permSet.GetMaxUsedIndex(); i++)
546  {
547  IPermission permission = GetPermission(i);
548  if (permission == null || permission.IsSubsetOf(null))
549  {
550  continue;
551  }
552  IPermission permission2 = target.GetPermission(i);
553  if (target.m_Unrestricted)
554  {
555  continue;
556  }
557  CodeAccessPermission codeAccessPermission = permission as CodeAccessPermission;
558  if (codeAccessPermission == null)
559  {
560  if (!ignoreNonCas && !permission.IsSubsetOf(permission2))
561  {
562  firstPermThatFailed = permission;
563  return false;
564  }
565  continue;
566  }
567  firstPermThatFailed = permission;
568  switch (type)
569  {
570  case IsSubsetOfType.Normal:
571  if (!permission.IsSubsetOf(permission2))
572  {
573  return false;
574  }
575  break;
576  case IsSubsetOfType.CheckDemand:
577  if (!codeAccessPermission.CheckDemand((CodeAccessPermission)permission2))
578  {
579  return false;
580  }
581  break;
582  case IsSubsetOfType.CheckPermitOnly:
583  if (!codeAccessPermission.CheckPermitOnly((CodeAccessPermission)permission2))
584  {
585  return false;
586  }
587  break;
588  case IsSubsetOfType.CheckAssertion:
589  if (!codeAccessPermission.CheckAssert((CodeAccessPermission)permission2))
590  {
591  return false;
592  }
593  break;
594  }
595  firstPermThatFailed = null;
596  }
597  return true;
598  }
599 
604  public bool IsSubsetOf(PermissionSet target)
605  {
606  IPermission firstPermThatFailed;
607  return IsSubsetOfHelper(target, IsSubsetOfType.Normal, out firstPermThatFailed, ignoreNonCas: false);
608  }
609 
610  internal bool CheckDemand(PermissionSet target, out IPermission firstPermThatFailed)
611  {
612  return IsSubsetOfHelper(target, IsSubsetOfType.CheckDemand, out firstPermThatFailed, ignoreNonCas: true);
613  }
614 
615  internal bool CheckPermitOnly(PermissionSet target, out IPermission firstPermThatFailed)
616  {
617  return IsSubsetOfHelper(target, IsSubsetOfType.CheckPermitOnly, out firstPermThatFailed, ignoreNonCas: true);
618  }
619 
620  internal bool CheckAssertion(PermissionSet target)
621  {
622  IPermission firstPermThatFailed;
623  return IsSubsetOfHelper(target, IsSubsetOfType.CheckAssertion, out firstPermThatFailed, ignoreNonCas: true);
624  }
625 
626  internal bool CheckDeny(PermissionSet deniedSet, out IPermission firstPermThatFailed)
627  {
628  firstPermThatFailed = null;
629  if (deniedSet == null || deniedSet.FastIsEmpty() || FastIsEmpty())
630  {
631  return true;
632  }
633  if (m_Unrestricted && deniedSet.m_Unrestricted)
634  {
635  return false;
636  }
637  PermissionSetEnumeratorInternal permissionSetEnumeratorInternal = new PermissionSetEnumeratorInternal(this);
638  while (permissionSetEnumeratorInternal.MoveNext())
639  {
640  CodeAccessPermission codeAccessPermission = permissionSetEnumeratorInternal.Current as CodeAccessPermission;
641  if (codeAccessPermission != null && !codeAccessPermission.IsSubsetOf(null))
642  {
643  if (deniedSet.m_Unrestricted)
644  {
645  firstPermThatFailed = codeAccessPermission;
646  return false;
647  }
648  CodeAccessPermission denied = (CodeAccessPermission)deniedSet.GetPermission(permissionSetEnumeratorInternal.GetCurrentIndex());
649  if (!codeAccessPermission.CheckDeny(denied))
650  {
651  firstPermThatFailed = codeAccessPermission;
652  return false;
653  }
654  }
655  }
656  if (m_Unrestricted)
657  {
658  PermissionSetEnumeratorInternal permissionSetEnumeratorInternal2 = new PermissionSetEnumeratorInternal(deniedSet);
659  while (permissionSetEnumeratorInternal2.MoveNext())
660  {
661  if (permissionSetEnumeratorInternal2.Current is IPermission)
662  {
663  return false;
664  }
665  }
666  }
667  return true;
668  }
669 
670  internal void CheckDecoded(CodeAccessPermission demandedPerm, PermissionToken tokenDemandedPerm)
671  {
672  if (!m_allPermissionsDecoded && m_permSet != null)
673  {
674  if (tokenDemandedPerm == null)
675  {
676  tokenDemandedPerm = PermissionToken.GetToken(demandedPerm);
677  }
678  CheckDecoded(tokenDemandedPerm.m_index);
679  }
680  }
681 
682  internal void CheckDecoded(int index)
683  {
684  if (!m_allPermissionsDecoded && m_permSet != null)
685  {
686  GetPermission(index);
687  }
688  }
689 
690  internal void CheckDecoded(PermissionSet demandedSet)
691  {
692  if (!m_allPermissionsDecoded && m_permSet != null)
693  {
694  PermissionSetEnumeratorInternal enumeratorInternal = demandedSet.GetEnumeratorInternal();
695  while (enumeratorInternal.MoveNext())
696  {
697  CheckDecoded(enumeratorInternal.GetCurrentIndex());
698  }
699  }
700  }
701 
702  internal static void SafeChildAdd(SecurityElement parent, ISecurityElementFactory child, bool copy)
703  {
704  if (child == parent)
705  {
706  return;
707  }
708  if (child.GetTag().Equals("IPermission") || child.GetTag().Equals("Permission"))
709  {
710  parent.AddChild(child);
711  }
712  else if (parent.Tag.Equals(child.GetTag()))
713  {
714  SecurityElement securityElement = (SecurityElement)child;
715  for (int i = 0; i < securityElement.InternalChildren.Count; i++)
716  {
717  ISecurityElementFactory child2 = (ISecurityElementFactory)securityElement.InternalChildren[i];
718  parent.AddChildNoDuplicates(child2);
719  }
720  }
721  else
722  {
723  parent.AddChild((ISecurityElementFactory)(copy ? child.Copy() : child));
724  }
725  }
726 
727  internal void InplaceIntersect(PermissionSet other)
728  {
729  Exception ex = null;
730  m_CheckedForNonCas = false;
731  if (this == other)
732  {
733  return;
734  }
735  if (other == null || other.FastIsEmpty())
736  {
737  Reset();
738  }
739  else
740  {
741  if (FastIsEmpty())
742  {
743  return;
744  }
745  int num = (m_permSet == null) ? (-1) : m_permSet.GetMaxUsedIndex();
746  int num2 = (other.m_permSet == null) ? (-1) : other.m_permSet.GetMaxUsedIndex();
747  if (IsUnrestricted() && num < num2)
748  {
749  num = num2;
750  CheckSet();
751  }
752  if (other.IsUnrestricted())
753  {
754  other.CheckSet();
755  }
756  for (int i = 0; i <= num; i++)
757  {
758  object item = m_permSet.GetItem(i);
759  IPermission permission = item as IPermission;
760  ISecurityElementFactory securityElementFactory = item as ISecurityElementFactory;
761  object item2 = other.m_permSet.GetItem(i);
762  IPermission permission2 = item2 as IPermission;
763  ISecurityElementFactory securityElementFactory2 = item2 as ISecurityElementFactory;
764  if (item == null && item2 == null)
765  {
766  continue;
767  }
768  if (securityElementFactory != null && securityElementFactory2 != null)
769  {
770  if (securityElementFactory.GetTag().Equals("PermissionIntersection") || securityElementFactory.GetTag().Equals("PermissionUnrestrictedIntersection"))
771  {
772  SafeChildAdd((SecurityElement)securityElementFactory, securityElementFactory2, copy: true);
773  continue;
774  }
775  bool copy = true;
776  if (IsUnrestricted())
777  {
778  SecurityElement securityElement = new SecurityElement("PermissionUnrestrictedUnion");
779  securityElement.AddAttribute("class", securityElementFactory.Attribute("class"));
780  SafeChildAdd(securityElement, securityElementFactory, copy: false);
781  securityElementFactory = securityElement;
782  }
783  if (other.IsUnrestricted())
784  {
785  SecurityElement securityElement2 = new SecurityElement("PermissionUnrestrictedUnion");
786  securityElement2.AddAttribute("class", securityElementFactory2.Attribute("class"));
787  SafeChildAdd(securityElement2, securityElementFactory2, copy: true);
788  securityElementFactory2 = securityElement2;
789  copy = false;
790  }
791  SecurityElement securityElement3 = new SecurityElement("PermissionIntersection");
792  securityElement3.AddAttribute("class", securityElementFactory.Attribute("class"));
793  SafeChildAdd(securityElement3, securityElementFactory, copy: false);
794  SafeChildAdd(securityElement3, securityElementFactory2, copy);
795  m_permSet.SetItem(i, securityElement3);
796  }
797  else if (item == null)
798  {
799  if (!IsUnrestricted())
800  {
801  continue;
802  }
803  if (securityElementFactory2 != null)
804  {
805  SecurityElement securityElement4 = new SecurityElement("PermissionUnrestrictedIntersection");
806  securityElement4.AddAttribute("class", securityElementFactory2.Attribute("class"));
807  SafeChildAdd(securityElement4, securityElementFactory2, copy: true);
808  m_permSet.SetItem(i, securityElement4);
809  }
810  else
811  {
812  PermissionToken permissionToken = (PermissionToken)PermissionToken.s_tokenSet.GetItem(i);
813  if ((permissionToken.m_type & PermissionTokenType.IUnrestricted) != 0)
814  {
815  m_permSet.SetItem(i, permission2.Copy());
816  }
817  }
818  }
819  else if (item2 == null)
820  {
821  if (other.IsUnrestricted())
822  {
823  if (securityElementFactory != null)
824  {
825  SecurityElement securityElement5 = new SecurityElement("PermissionUnrestrictedIntersection");
826  securityElement5.AddAttribute("class", securityElementFactory.Attribute("class"));
827  SafeChildAdd(securityElement5, securityElementFactory, copy: false);
828  m_permSet.SetItem(i, securityElement5);
829  }
830  else
831  {
832  PermissionToken permissionToken2 = (PermissionToken)PermissionToken.s_tokenSet.GetItem(i);
833  if ((permissionToken2.m_type & PermissionTokenType.IUnrestricted) == (PermissionTokenType)0)
834  {
835  m_permSet.SetItem(i, null);
836  }
837  }
838  }
839  else
840  {
841  m_permSet.SetItem(i, null);
842  }
843  }
844  else
845  {
846  if (securityElementFactory != null)
847  {
848  permission = CreatePermission(securityElementFactory, i);
849  }
850  if (securityElementFactory2 != null)
851  {
852  permission2 = other.CreatePermission(securityElementFactory2, i);
853  }
854  try
855  {
856  IPermission item3 = (permission == null) ? permission2 : ((permission2 != null) ? permission.Intersect(permission2) : permission);
857  m_permSet.SetItem(i, item3);
858  }
859  catch (Exception ex2)
860  {
861  if (ex == null)
862  {
863  ex = ex2;
864  }
865  }
866  }
867  }
868  m_Unrestricted = (m_Unrestricted && other.m_Unrestricted);
869  if (ex != null)
870  {
871  throw ex;
872  }
873  }
874  }
875 
880  {
881  if (other == null || other.FastIsEmpty() || FastIsEmpty())
882  {
883  return null;
884  }
885  int num = (m_permSet == null) ? (-1) : m_permSet.GetMaxUsedIndex();
886  int num2 = (other.m_permSet == null) ? (-1) : other.m_permSet.GetMaxUsedIndex();
887  int num3 = (num < num2) ? num : num2;
888  if (IsUnrestricted() && num3 < num2)
889  {
890  num3 = num2;
891  CheckSet();
892  }
893  if (other.IsUnrestricted() && num3 < num)
894  {
895  num3 = num;
896  other.CheckSet();
897  }
898  PermissionSet permissionSet = new PermissionSet(fUnrestricted: false);
899  if (num3 > -1)
900  {
901  permissionSet.m_permSet = new TokenBasedSet();
902  }
903  for (int i = 0; i <= num3; i++)
904  {
905  object item = m_permSet.GetItem(i);
906  IPermission permission = item as IPermission;
907  ISecurityElementFactory securityElementFactory = item as ISecurityElementFactory;
908  object item2 = other.m_permSet.GetItem(i);
909  IPermission permission2 = item2 as IPermission;
910  ISecurityElementFactory securityElementFactory2 = item2 as ISecurityElementFactory;
911  if (item == null && item2 == null)
912  {
913  continue;
914  }
915  if (securityElementFactory != null && securityElementFactory2 != null)
916  {
917  bool copy = true;
918  bool copy2 = true;
919  SecurityElement securityElement = new SecurityElement("PermissionIntersection");
920  securityElement.AddAttribute("class", securityElementFactory2.Attribute("class"));
921  if (IsUnrestricted())
922  {
923  SecurityElement securityElement2 = new SecurityElement("PermissionUnrestrictedUnion");
924  securityElement2.AddAttribute("class", securityElementFactory.Attribute("class"));
925  SafeChildAdd(securityElement2, securityElementFactory, copy: true);
926  copy2 = false;
927  securityElementFactory = securityElement2;
928  }
929  if (other.IsUnrestricted())
930  {
931  SecurityElement securityElement3 = new SecurityElement("PermissionUnrestrictedUnion");
932  securityElement3.AddAttribute("class", securityElementFactory2.Attribute("class"));
933  SafeChildAdd(securityElement3, securityElementFactory2, copy: true);
934  copy = false;
935  securityElementFactory2 = securityElement3;
936  }
937  SafeChildAdd(securityElement, securityElementFactory2, copy);
938  SafeChildAdd(securityElement, securityElementFactory, copy2);
939  permissionSet.m_permSet.SetItem(i, securityElement);
940  }
941  else if (item == null)
942  {
943  if (!m_Unrestricted)
944  {
945  continue;
946  }
947  if (securityElementFactory2 != null)
948  {
949  SecurityElement securityElement4 = new SecurityElement("PermissionUnrestrictedIntersection");
950  securityElement4.AddAttribute("class", securityElementFactory2.Attribute("class"));
951  SafeChildAdd(securityElement4, securityElementFactory2, copy: true);
952  permissionSet.m_permSet.SetItem(i, securityElement4);
953  }
954  else if (permission2 != null)
955  {
956  PermissionToken permissionToken = (PermissionToken)PermissionToken.s_tokenSet.GetItem(i);
957  if ((permissionToken.m_type & PermissionTokenType.IUnrestricted) != 0)
958  {
959  permissionSet.m_permSet.SetItem(i, permission2.Copy());
960  }
961  }
962  }
963  else if (item2 == null)
964  {
965  if (!other.m_Unrestricted)
966  {
967  continue;
968  }
969  if (securityElementFactory != null)
970  {
971  SecurityElement securityElement5 = new SecurityElement("PermissionUnrestrictedIntersection");
972  securityElement5.AddAttribute("class", securityElementFactory.Attribute("class"));
973  SafeChildAdd(securityElement5, securityElementFactory, copy: true);
974  permissionSet.m_permSet.SetItem(i, securityElement5);
975  }
976  else if (permission != null)
977  {
978  PermissionToken permissionToken2 = (PermissionToken)PermissionToken.s_tokenSet.GetItem(i);
979  if ((permissionToken2.m_type & PermissionTokenType.IUnrestricted) != 0)
980  {
981  permissionSet.m_permSet.SetItem(i, permission.Copy());
982  }
983  }
984  }
985  else
986  {
987  if (securityElementFactory != null)
988  {
989  permission = CreatePermission(securityElementFactory, i);
990  }
991  if (securityElementFactory2 != null)
992  {
993  permission2 = other.CreatePermission(securityElementFactory2, i);
994  }
995  IPermission item3 = (permission == null) ? permission2 : ((permission2 != null) ? permission.Intersect(permission2) : permission);
996  permissionSet.m_permSet.SetItem(i, item3);
997  }
998  }
999  permissionSet.m_Unrestricted = (m_Unrestricted && other.m_Unrestricted);
1000  if (permissionSet.FastIsEmpty())
1001  {
1002  return null;
1003  }
1004  return permissionSet;
1005  }
1006 
1007  internal void InplaceUnion(PermissionSet other)
1008  {
1009  if (this == other || other == null || other.FastIsEmpty())
1010  {
1011  return;
1012  }
1013  m_CheckedForNonCas = false;
1014  m_Unrestricted = (m_Unrestricted || other.m_Unrestricted);
1015  if (m_Unrestricted)
1016  {
1017  m_permSet = null;
1018  return;
1019  }
1020  int num = -1;
1021  if (other.m_permSet != null)
1022  {
1023  num = other.m_permSet.GetMaxUsedIndex();
1024  CheckSet();
1025  }
1026  Exception ex = null;
1027  for (int i = 0; i <= num; i++)
1028  {
1029  object item = m_permSet.GetItem(i);
1030  IPermission permission = item as IPermission;
1031  ISecurityElementFactory securityElementFactory = item as ISecurityElementFactory;
1032  object item2 = other.m_permSet.GetItem(i);
1033  IPermission permission2 = item2 as IPermission;
1034  ISecurityElementFactory securityElementFactory2 = item2 as ISecurityElementFactory;
1035  if (item == null && item2 == null)
1036  {
1037  continue;
1038  }
1039  if (securityElementFactory != null && securityElementFactory2 != null)
1040  {
1041  if (securityElementFactory.GetTag().Equals("PermissionUnion") || securityElementFactory.GetTag().Equals("PermissionUnrestrictedUnion"))
1042  {
1043  SafeChildAdd((SecurityElement)securityElementFactory, securityElementFactory2, copy: true);
1044  continue;
1045  }
1046  SecurityElement securityElement = (!IsUnrestricted() && !other.IsUnrestricted()) ? new SecurityElement("PermissionUnion") : new SecurityElement("PermissionUnrestrictedUnion");
1047  securityElement.AddAttribute("class", securityElementFactory.Attribute("class"));
1048  SafeChildAdd(securityElement, securityElementFactory, copy: false);
1049  SafeChildAdd(securityElement, securityElementFactory2, copy: true);
1050  m_permSet.SetItem(i, securityElement);
1051  }
1052  else if (item == null)
1053  {
1054  if (securityElementFactory2 != null)
1055  {
1056  m_permSet.SetItem(i, securityElementFactory2.Copy());
1057  }
1058  else if (permission2 != null)
1059  {
1060  PermissionToken permissionToken = (PermissionToken)PermissionToken.s_tokenSet.GetItem(i);
1061  if ((permissionToken.m_type & PermissionTokenType.IUnrestricted) == (PermissionTokenType)0 || !m_Unrestricted)
1062  {
1063  m_permSet.SetItem(i, permission2.Copy());
1064  }
1065  }
1066  }
1067  else if (item2 != null)
1068  {
1069  if (securityElementFactory != null)
1070  {
1071  permission = CreatePermission(securityElementFactory, i);
1072  }
1073  if (securityElementFactory2 != null)
1074  {
1075  permission2 = other.CreatePermission(securityElementFactory2, i);
1076  }
1077  try
1078  {
1079  IPermission item3 = (permission == null) ? permission2 : ((permission2 != null) ? permission.Union(permission2) : permission);
1080  m_permSet.SetItem(i, item3);
1081  }
1082  catch (Exception ex2)
1083  {
1084  if (ex == null)
1085  {
1086  ex = ex2;
1087  }
1088  }
1089  }
1090  }
1091  if (ex == null)
1092  {
1093  return;
1094  }
1095  throw ex;
1096  }
1097 
1102  {
1103  if (other == null || other.FastIsEmpty())
1104  {
1105  return Copy();
1106  }
1107  if (FastIsEmpty())
1108  {
1109  return other.Copy();
1110  }
1111  int num = -1;
1112  PermissionSet permissionSet = new PermissionSet();
1113  permissionSet.m_Unrestricted = (m_Unrestricted || other.m_Unrestricted);
1114  if (permissionSet.m_Unrestricted)
1115  {
1116  return permissionSet;
1117  }
1118  CheckSet();
1119  other.CheckSet();
1120  num = ((m_permSet.GetMaxUsedIndex() > other.m_permSet.GetMaxUsedIndex()) ? m_permSet.GetMaxUsedIndex() : other.m_permSet.GetMaxUsedIndex());
1121  permissionSet.m_permSet = new TokenBasedSet();
1122  for (int i = 0; i <= num; i++)
1123  {
1124  object item = m_permSet.GetItem(i);
1125  IPermission permission = item as IPermission;
1126  ISecurityElementFactory securityElementFactory = item as ISecurityElementFactory;
1127  object item2 = other.m_permSet.GetItem(i);
1128  IPermission permission2 = item2 as IPermission;
1129  ISecurityElementFactory securityElementFactory2 = item2 as ISecurityElementFactory;
1130  if (item == null && item2 == null)
1131  {
1132  continue;
1133  }
1134  if (securityElementFactory != null && securityElementFactory2 != null)
1135  {
1136  SecurityElement securityElement = (!IsUnrestricted() && !other.IsUnrestricted()) ? new SecurityElement("PermissionUnion") : new SecurityElement("PermissionUnrestrictedUnion");
1137  securityElement.AddAttribute("class", securityElementFactory.Attribute("class"));
1138  SafeChildAdd(securityElement, securityElementFactory, copy: true);
1139  SafeChildAdd(securityElement, securityElementFactory2, copy: true);
1140  permissionSet.m_permSet.SetItem(i, securityElement);
1141  }
1142  else if (item == null)
1143  {
1144  if (securityElementFactory2 != null)
1145  {
1146  permissionSet.m_permSet.SetItem(i, securityElementFactory2.Copy());
1147  }
1148  else if (permission2 != null)
1149  {
1150  PermissionToken permissionToken = (PermissionToken)PermissionToken.s_tokenSet.GetItem(i);
1151  if ((permissionToken.m_type & PermissionTokenType.IUnrestricted) == (PermissionTokenType)0 || !permissionSet.m_Unrestricted)
1152  {
1153  permissionSet.m_permSet.SetItem(i, permission2.Copy());
1154  }
1155  }
1156  }
1157  else if (item2 == null)
1158  {
1159  if (securityElementFactory != null)
1160  {
1161  permissionSet.m_permSet.SetItem(i, securityElementFactory.Copy());
1162  }
1163  else if (permission != null)
1164  {
1165  PermissionToken permissionToken2 = (PermissionToken)PermissionToken.s_tokenSet.GetItem(i);
1166  if ((permissionToken2.m_type & PermissionTokenType.IUnrestricted) == (PermissionTokenType)0 || !permissionSet.m_Unrestricted)
1167  {
1168  permissionSet.m_permSet.SetItem(i, permission.Copy());
1169  }
1170  }
1171  }
1172  else
1173  {
1174  if (securityElementFactory != null)
1175  {
1176  permission = CreatePermission(securityElementFactory, i);
1177  }
1178  if (securityElementFactory2 != null)
1179  {
1180  permission2 = other.CreatePermission(securityElementFactory2, i);
1181  }
1182  IPermission item3 = (permission == null) ? permission2 : ((permission2 != null) ? permission.Union(permission2) : permission);
1183  permissionSet.m_permSet.SetItem(i, item3);
1184  }
1185  }
1186  return permissionSet;
1187  }
1188 
1189  internal void MergeDeniedSet(PermissionSet denied)
1190  {
1191  if (denied == null || denied.FastIsEmpty() || FastIsEmpty())
1192  {
1193  return;
1194  }
1195  m_CheckedForNonCas = false;
1196  if (m_permSet == null || denied.m_permSet == null)
1197  {
1198  return;
1199  }
1200  int num = (denied.m_permSet.GetMaxUsedIndex() > m_permSet.GetMaxUsedIndex()) ? m_permSet.GetMaxUsedIndex() : denied.m_permSet.GetMaxUsedIndex();
1201  for (int i = 0; i <= num; i++)
1202  {
1203  IPermission permission = denied.m_permSet.GetItem(i) as IPermission;
1204  if (permission != null)
1205  {
1206  IPermission permission2 = m_permSet.GetItem(i) as IPermission;
1207  if (permission2 == null && !m_Unrestricted)
1208  {
1209  denied.m_permSet.SetItem(i, null);
1210  }
1211  else if (permission2 != null && permission != null && permission2.IsSubsetOf(permission))
1212  {
1213  m_permSet.SetItem(i, null);
1214  denied.m_permSet.SetItem(i, null);
1215  }
1216  }
1217  }
1218  }
1219 
1220  internal bool Contains(IPermission perm)
1221  {
1222  if (perm == null)
1223  {
1224  return true;
1225  }
1226  if (m_Unrestricted)
1227  {
1228  return true;
1229  }
1230  if (FastIsEmpty())
1231  {
1232  return false;
1233  }
1234  PermissionToken token = PermissionToken.GetToken(perm);
1235  object item = m_permSet.GetItem(token.m_index);
1236  if (item == null)
1237  {
1238  return perm.IsSubsetOf(null);
1239  }
1240  IPermission permission = GetPermission(token.m_index);
1241  if (permission != null)
1242  {
1243  return perm.IsSubsetOf(permission);
1244  }
1245  return perm.IsSubsetOf(null);
1246  }
1247 
1252  [ComVisible(false)]
1253  public override bool Equals(object obj)
1254  {
1255  PermissionSet permissionSet = obj as PermissionSet;
1256  if (permissionSet == null)
1257  {
1258  return false;
1259  }
1260  if (m_Unrestricted != permissionSet.m_Unrestricted)
1261  {
1262  return false;
1263  }
1264  CheckSet();
1265  permissionSet.CheckSet();
1266  DecodeAllPermissions();
1267  permissionSet.DecodeAllPermissions();
1268  int num = Math.Max(m_permSet.GetMaxUsedIndex(), permissionSet.m_permSet.GetMaxUsedIndex());
1269  for (int i = 0; i <= num; i++)
1270  {
1271  IPermission permission = (IPermission)m_permSet.GetItem(i);
1272  IPermission permission2 = (IPermission)permissionSet.m_permSet.GetItem(i);
1273  if (permission == null && permission2 == null)
1274  {
1275  continue;
1276  }
1277  if (permission == null)
1278  {
1279  if (!permission2.IsSubsetOf(null))
1280  {
1281  return false;
1282  }
1283  }
1284  else if (permission2 == null)
1285  {
1286  if (!permission.IsSubsetOf(null))
1287  {
1288  return false;
1289  }
1290  }
1291  else if (!permission.Equals(permission2))
1292  {
1293  return false;
1294  }
1295  }
1296  return true;
1297  }
1298 
1301  [ComVisible(false)]
1302  public override int GetHashCode()
1303  {
1304  int num = m_Unrestricted ? (-1) : 0;
1305  if (m_permSet != null)
1306  {
1307  DecodeAllPermissions();
1308  int maxUsedIndex = m_permSet.GetMaxUsedIndex();
1309  for (int i = m_permSet.GetStartingIndex(); i <= maxUsedIndex; i++)
1310  {
1311  IPermission permission = (IPermission)m_permSet.GetItem(i);
1312  if (permission != null)
1313  {
1314  num ^= permission.GetHashCode();
1315  }
1316  }
1317  }
1318  return num;
1319  }
1320 
1323  [MethodImpl(MethodImplOptions.NoInlining)]
1324  [SecuritySafeCritical]
1325  public void Demand()
1326  {
1327  if (!FastIsEmpty())
1328  {
1330  if (m_ContainsCas)
1331  {
1332  StackCrawlMark stackMark = StackCrawlMark.LookForMyCallersCaller;
1333  CodeAccessSecurityEngine.Check(GetCasOnlySet(), ref stackMark);
1334  }
1335  if (m_ContainsNonCas)
1336  {
1337  DemandNonCAS();
1338  }
1339  }
1340  }
1341 
1342  [SecurityCritical]
1343  internal void DemandNonCAS()
1344  {
1346  if (!m_ContainsNonCas || m_permSet == null)
1347  {
1348  return;
1349  }
1350  CheckSet();
1351  for (int i = m_permSet.GetStartingIndex(); i <= m_permSet.GetMaxUsedIndex(); i++)
1352  {
1353  IPermission permission = GetPermission(i);
1354  if (permission != null && !(permission is CodeAccessPermission))
1355  {
1356  permission.Demand();
1357  }
1358  }
1359  }
1360 
1363  [MethodImpl(MethodImplOptions.NoInlining)]
1364  [SecuritySafeCritical]
1365  public void Assert()
1366  {
1367  StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
1368  SecurityRuntime.Assert(this, ref stackMark);
1369  }
1370 
1373  [MethodImpl(MethodImplOptions.NoInlining)]
1374  [SecuritySafeCritical]
1375  [Obsolete("Deny is obsolete and will be removed in a future release of the .NET Framework. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
1376  public void Deny()
1377  {
1378  StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
1379  SecurityRuntime.Deny(this, ref stackMark);
1380  }
1381 
1383  [MethodImpl(MethodImplOptions.NoInlining)]
1384  [SecuritySafeCritical]
1385  public void PermitOnly()
1386  {
1387  StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
1388  SecurityRuntime.PermitOnly(this, ref stackMark);
1389  }
1390 
1391  internal IPermission GetFirstPerm()
1392  {
1393  IEnumerator enumerator = GetEnumerator();
1394  if (!enumerator.MoveNext())
1395  {
1396  return null;
1397  }
1398  return enumerator.Current as IPermission;
1399  }
1400 
1403  public virtual PermissionSet Copy()
1404  {
1405  return new PermissionSet(this);
1406  }
1407 
1408  internal PermissionSet CopyWithNoIdentityPermissions()
1409  {
1410  PermissionSet permissionSet = new PermissionSet(this);
1411  permissionSet.RemovePermission(typeof(GacIdentityPermission));
1412  permissionSet.RemovePermission(typeof(PublisherIdentityPermission));
1413  permissionSet.RemovePermission(typeof(StrongNameIdentityPermission));
1414  permissionSet.RemovePermission(typeof(UrlIdentityPermission));
1415  permissionSet.RemovePermission(typeof(ZoneIdentityPermission));
1416  return permissionSet;
1417  }
1418 
1422  {
1423  return GetEnumeratorImpl();
1424  }
1425 
1428  protected virtual IEnumerator GetEnumeratorImpl()
1429  {
1430  return new PermissionSetEnumerator(this);
1431  }
1432 
1433  internal PermissionSetEnumeratorInternal GetEnumeratorInternal()
1434  {
1435  return new PermissionSetEnumeratorInternal(this);
1436  }
1437 
1440  public override string ToString()
1441  {
1442  return ToXml().ToString();
1443  }
1444 
1445  private void NormalizePermissionSet()
1446  {
1447  PermissionSet permissionSet = new PermissionSet(fUnrestricted: false);
1448  permissionSet.m_Unrestricted = m_Unrestricted;
1449  if (m_permSet != null)
1450  {
1451  for (int i = m_permSet.GetStartingIndex(); i <= m_permSet.GetMaxUsedIndex(); i++)
1452  {
1453  object item = m_permSet.GetItem(i);
1454  IPermission permission = item as IPermission;
1455  ISecurityElementFactory securityElementFactory = item as ISecurityElementFactory;
1456  if (securityElementFactory != null)
1457  {
1458  permission = CreatePerm(securityElementFactory);
1459  }
1460  if (permission != null)
1461  {
1462  permissionSet.SetPermission(permission);
1463  }
1464  }
1465  }
1466  m_permSet = permissionSet.m_permSet;
1467  }
1468 
1469  private bool DecodeXml(byte[] data, HostProtectionResource fullTrustOnlyResources, HostProtectionResource inaccessibleResources)
1470  {
1471  if (data != null && data.Length != 0)
1472  {
1473  FromXml(new Parser(data, Tokenizer.ByteTokenEncoding.UnicodeTokens).GetTopElement());
1474  }
1475  FilterHostProtectionPermissions(fullTrustOnlyResources, inaccessibleResources);
1476  DecodeAllPermissions();
1477  return true;
1478  }
1479 
1480  private void DecodeAllPermissions()
1481  {
1482  if (m_permSet == null)
1483  {
1484  m_allPermissionsDecoded = true;
1485  return;
1486  }
1487  int maxUsedIndex = m_permSet.GetMaxUsedIndex();
1488  for (int i = 0; i <= maxUsedIndex; i++)
1489  {
1490  GetPermission(i);
1491  }
1492  m_allPermissionsDecoded = true;
1493  }
1494 
1495  internal void FilterHostProtectionPermissions(HostProtectionResource fullTrustOnly, HostProtectionResource inaccessible)
1496  {
1497  HostProtectionPermission.protectedResources = fullTrustOnly;
1498  HostProtectionPermission hostProtectionPermission = (HostProtectionPermission)GetPermission(HostProtectionPermission.GetTokenIndex());
1499  if (hostProtectionPermission != null)
1500  {
1501  HostProtectionPermission hostProtectionPermission2 = (HostProtectionPermission)hostProtectionPermission.Intersect(new HostProtectionPermission(fullTrustOnly));
1502  if (hostProtectionPermission2 == null)
1503  {
1504  RemovePermission(typeof(HostProtectionPermission));
1505  }
1506  else if (hostProtectionPermission2.Resources != hostProtectionPermission.Resources)
1507  {
1508  SetPermission(hostProtectionPermission2);
1509  }
1510  }
1511  }
1512 
1517  public virtual void FromXml(SecurityElement et)
1518  {
1519  FromXml(et, allowInternalOnly: false, ignoreTypeLoadFailures: false);
1520  }
1521 
1522  internal static bool IsPermissionTag(string tag, bool allowInternalOnly)
1523  {
1524  if (tag.Equals("Permission") || tag.Equals("IPermission"))
1525  {
1526  return true;
1527  }
1528  if (allowInternalOnly && (tag.Equals("PermissionUnion") || tag.Equals("PermissionIntersection") || tag.Equals("PermissionUnrestrictedIntersection") || tag.Equals("PermissionUnrestrictedUnion")))
1529  {
1530  return true;
1531  }
1532  return false;
1533  }
1534 
1535  internal virtual void FromXml(SecurityElement et, bool allowInternalOnly, bool ignoreTypeLoadFailures)
1536  {
1537  if (et == null)
1538  {
1539  throw new ArgumentNullException("et");
1540  }
1541  if (!et.Tag.Equals("PermissionSet"))
1542  {
1543  throw new ArgumentException(string.Format(null, Environment.GetResourceString("Argument_InvalidXMLElement"), "PermissionSet", GetType().FullName));
1544  }
1545  Reset();
1546  m_ignoreTypeLoadFailures = ignoreTypeLoadFailures;
1547  m_allPermissionsDecoded = false;
1548  m_Unrestricted = XMLUtil.IsUnrestricted(et);
1549  if (et.InternalChildren == null)
1550  {
1551  return;
1552  }
1553  int count = et.InternalChildren.Count;
1554  for (int i = 0; i < count; i++)
1555  {
1556  SecurityElement securityElement = (SecurityElement)et.Children[i];
1557  if (!IsPermissionTag(securityElement.Tag, allowInternalOnly))
1558  {
1559  continue;
1560  }
1561  string text = securityElement.Attribute("class");
1562  PermissionToken permissionToken;
1563  object obj;
1564  if (text != null)
1565  {
1566  permissionToken = PermissionToken.GetToken(text);
1567  if (permissionToken == null)
1568  {
1569  obj = CreatePerm(securityElement);
1570  if (obj != null)
1571  {
1572  permissionToken = PermissionToken.GetToken((IPermission)obj);
1573  }
1574  }
1575  else
1576  {
1577  obj = securityElement;
1578  }
1579  }
1580  else
1581  {
1582  IPermission permission = CreatePerm(securityElement);
1583  if (permission == null)
1584  {
1585  permissionToken = null;
1586  obj = null;
1587  }
1588  else
1589  {
1590  permissionToken = PermissionToken.GetToken(permission);
1591  obj = permission;
1592  }
1593  }
1594  if (permissionToken != null && obj != null)
1595  {
1596  if (m_permSet == null)
1597  {
1598  m_permSet = new TokenBasedSet();
1599  }
1600  if (m_permSet.GetItem(permissionToken.m_index) != null)
1601  {
1602  IPermission target = (!(m_permSet.GetItem(permissionToken.m_index) is IPermission)) ? CreatePerm((SecurityElement)m_permSet.GetItem(permissionToken.m_index)) : ((IPermission)m_permSet.GetItem(permissionToken.m_index));
1603  obj = ((!(obj is IPermission)) ? CreatePerm((SecurityElement)obj).Union(target) : ((IPermission)obj).Union(target));
1604  }
1605  if (m_Unrestricted && obj is IPermission)
1606  {
1607  obj = null;
1608  }
1609  m_permSet.SetItem(permissionToken.m_index, obj);
1610  }
1611  }
1612  }
1613 
1614  internal virtual void FromXml(SecurityDocument doc, int position, bool allowInternalOnly)
1615  {
1616  if (doc == null)
1617  {
1618  throw new ArgumentNullException("doc");
1619  }
1620  if (!doc.GetTagForElement(position).Equals("PermissionSet"))
1621  {
1622  throw new ArgumentException(string.Format(null, Environment.GetResourceString("Argument_InvalidXMLElement"), "PermissionSet", GetType().FullName));
1623  }
1624  Reset();
1625  m_allPermissionsDecoded = false;
1626  Exception ex = null;
1627  string attributeForElement = doc.GetAttributeForElement(position, "Unrestricted");
1628  if (attributeForElement != null)
1629  {
1630  m_Unrestricted = (attributeForElement.Equals("True") || attributeForElement.Equals("true") || attributeForElement.Equals("TRUE"));
1631  }
1632  else
1633  {
1634  m_Unrestricted = false;
1635  }
1636  ArrayList childrenPositionForElement = doc.GetChildrenPositionForElement(position);
1637  int count = childrenPositionForElement.Count;
1638  for (int i = 0; i < count; i++)
1639  {
1640  int position2 = (int)childrenPositionForElement[i];
1641  if (IsPermissionTag(doc.GetTagForElement(position2), allowInternalOnly))
1642  {
1643  try
1644  {
1645  string attributeForElement2 = doc.GetAttributeForElement(position2, "class");
1646  PermissionToken permissionToken;
1647  object obj;
1648  if (attributeForElement2 != null)
1649  {
1650  permissionToken = PermissionToken.GetToken(attributeForElement2);
1651  if (permissionToken == null)
1652  {
1653  obj = CreatePerm(doc.GetElement(position2, bCreate: true));
1654  if (obj != null)
1655  {
1656  permissionToken = PermissionToken.GetToken((IPermission)obj);
1657  }
1658  }
1659  else
1660  {
1661  obj = ((ISecurityElementFactory)new SecurityDocumentElement(doc, position2)).CreateSecurityElement();
1662  }
1663  }
1664  else
1665  {
1666  IPermission permission = CreatePerm(doc.GetElement(position2, bCreate: true));
1667  if (permission == null)
1668  {
1669  permissionToken = null;
1670  obj = null;
1671  }
1672  else
1673  {
1674  permissionToken = PermissionToken.GetToken(permission);
1675  obj = permission;
1676  }
1677  }
1678  if (permissionToken != null && obj != null)
1679  {
1680  if (m_permSet == null)
1681  {
1682  m_permSet = new TokenBasedSet();
1683  }
1684  IPermission permission2 = null;
1685  if (m_permSet.GetItem(permissionToken.m_index) != null)
1686  {
1687  permission2 = ((!(m_permSet.GetItem(permissionToken.m_index) is IPermission)) ? CreatePerm(m_permSet.GetItem(permissionToken.m_index)) : ((IPermission)m_permSet.GetItem(permissionToken.m_index)));
1688  }
1689  if (permission2 != null)
1690  {
1691  obj = ((!(obj is IPermission)) ? permission2.Union(CreatePerm(obj)) : permission2.Union((IPermission)obj));
1692  }
1693  if (m_Unrestricted && obj is IPermission)
1694  {
1695  obj = null;
1696  }
1697  m_permSet.SetItem(permissionToken.m_index, obj);
1698  }
1699  }
1700  catch (Exception ex2)
1701  {
1702  if (ex == null)
1703  {
1704  ex = ex2;
1705  }
1706  }
1707  }
1708  }
1709  if (ex != null)
1710  {
1711  throw ex;
1712  }
1713  }
1714 
1715  private IPermission CreatePerm(object obj)
1716  {
1717  return CreatePerm(obj, m_ignoreTypeLoadFailures);
1718  }
1719 
1720  internal static IPermission CreatePerm(object obj, bool ignoreTypeLoadFailures)
1721  {
1722  SecurityElement securityElement = obj as SecurityElement;
1723  ISecurityElementFactory securityElementFactory = obj as ISecurityElementFactory;
1724  if (securityElement == null && securityElementFactory != null)
1725  {
1726  securityElement = securityElementFactory.CreateSecurityElement();
1727  }
1728  IPermission permission = null;
1729  switch (securityElement.Tag)
1730  {
1731  case "PermissionUnion":
1732  {
1733  IEnumerator enumerator = securityElement.Children.GetEnumerator();
1734  while (enumerator.MoveNext())
1735  {
1736  IPermission permission5 = CreatePerm((SecurityElement)enumerator.Current, ignoreTypeLoadFailures);
1737  permission = ((permission == null) ? permission5 : permission.Union(permission5));
1738  }
1739  break;
1740  }
1741  case "PermissionIntersection":
1742  {
1743  IEnumerator enumerator = securityElement.Children.GetEnumerator();
1744  while (enumerator.MoveNext())
1745  {
1746  IPermission permission3 = CreatePerm((SecurityElement)enumerator.Current, ignoreTypeLoadFailures);
1747  permission = ((permission == null) ? permission3 : permission.Intersect(permission3));
1748  if (permission == null)
1749  {
1750  return null;
1751  }
1752  }
1753  break;
1754  }
1755  case "PermissionUnrestrictedUnion":
1756  {
1757  IEnumerator enumerator = securityElement.Children.GetEnumerator();
1758  bool flag = true;
1759  while (enumerator.MoveNext())
1760  {
1761  IPermission permission4 = CreatePerm((SecurityElement)enumerator.Current, ignoreTypeLoadFailures);
1762  if (permission4 != null)
1763  {
1764  PermissionToken token2 = PermissionToken.GetToken(permission4);
1765  if ((token2.m_type & PermissionTokenType.IUnrestricted) != 0)
1766  {
1767  permission = XMLUtil.CreatePermission(GetPermissionElement((SecurityElement)enumerator.Current), PermissionState.Unrestricted, ignoreTypeLoadFailures);
1768  flag = false;
1769  break;
1770  }
1771  permission = ((!flag) ? permission4.Union(permission) : permission4);
1772  flag = false;
1773  }
1774  }
1775  break;
1776  }
1777  case "PermissionUnrestrictedIntersection":
1778  {
1779  IEnumerator enumerator = securityElement.Children.GetEnumerator();
1780  while (enumerator.MoveNext())
1781  {
1782  IPermission permission2 = CreatePerm((SecurityElement)enumerator.Current, ignoreTypeLoadFailures);
1783  if (permission2 == null)
1784  {
1785  return null;
1786  }
1787  PermissionToken token = PermissionToken.GetToken(permission2);
1788  permission = (((token.m_type & PermissionTokenType.IUnrestricted) == (PermissionTokenType)0) ? null : ((permission == null) ? permission2 : permission2.Intersect(permission)));
1789  if (permission == null)
1790  {
1791  return null;
1792  }
1793  }
1794  break;
1795  }
1796  case "IPermission":
1797  case "Permission":
1798  permission = securityElement.ToPermission(ignoreTypeLoadFailures);
1799  break;
1800  }
1801  return permission;
1802  }
1803 
1804  internal IPermission CreatePermission(object obj, int index)
1805  {
1806  IPermission permission = CreatePerm(obj);
1807  if (permission == null)
1808  {
1809  return null;
1810  }
1811  if (m_Unrestricted)
1812  {
1813  permission = null;
1814  }
1815  CheckSet();
1816  m_permSet.SetItem(index, permission);
1817  if (permission != null)
1818  {
1819  PermissionToken token = PermissionToken.GetToken(permission);
1820  if (token != null && token.m_index != index)
1821  {
1822  throw new ArgumentException(Environment.GetResourceString("Argument_UnableToGeneratePermissionSet"));
1823  }
1824  }
1825  return permission;
1826  }
1827 
1828  private static SecurityElement GetPermissionElement(SecurityElement el)
1829  {
1830  string tag = el.Tag;
1831  if (tag == "IPermission" || tag == "Permission")
1832  {
1833  return el;
1834  }
1835  IEnumerator enumerator = el.Children.GetEnumerator();
1836  if (enumerator.MoveNext())
1837  {
1838  return GetPermissionElement((SecurityElement)enumerator.Current);
1839  }
1840  return null;
1841  }
1842 
1843  internal static SecurityElement CreateEmptyPermissionSetXml()
1844  {
1845  SecurityElement securityElement = new SecurityElement("PermissionSet");
1846  securityElement.AddAttribute("class", "System.Security.PermissionSet");
1847  securityElement.AddAttribute("version", "1");
1848  return securityElement;
1849  }
1850 
1851  internal SecurityElement ToXml(string permName)
1852  {
1853  SecurityElement securityElement = new SecurityElement("PermissionSet");
1854  securityElement.AddAttribute("class", permName);
1855  securityElement.AddAttribute("version", "1");
1856  PermissionSetEnumeratorInternal permissionSetEnumeratorInternal = new PermissionSetEnumeratorInternal(this);
1857  if (m_Unrestricted)
1858  {
1859  securityElement.AddAttribute("Unrestricted", "true");
1860  }
1861  while (permissionSetEnumeratorInternal.MoveNext())
1862  {
1863  IPermission permission = (IPermission)permissionSetEnumeratorInternal.Current;
1864  if (!m_Unrestricted)
1865  {
1866  securityElement.AddChild(permission.ToXml());
1867  }
1868  }
1869  return securityElement;
1870  }
1871 
1872  internal SecurityElement InternalToXml()
1873  {
1874  SecurityElement securityElement = new SecurityElement("PermissionSet");
1875  securityElement.AddAttribute("class", GetType().FullName);
1876  securityElement.AddAttribute("version", "1");
1877  if (m_Unrestricted)
1878  {
1879  securityElement.AddAttribute("Unrestricted", "true");
1880  }
1881  if (m_permSet != null)
1882  {
1883  int maxUsedIndex = m_permSet.GetMaxUsedIndex();
1884  for (int i = m_permSet.GetStartingIndex(); i <= maxUsedIndex; i++)
1885  {
1886  object item = m_permSet.GetItem(i);
1887  if (item == null)
1888  {
1889  continue;
1890  }
1891  if (item is IPermission)
1892  {
1893  if (!m_Unrestricted)
1894  {
1895  securityElement.AddChild(((IPermission)item).ToXml());
1896  }
1897  }
1898  else
1899  {
1900  securityElement.AddChild((SecurityElement)item);
1901  }
1902  }
1903  }
1904  return securityElement;
1905  }
1906 
1909  public virtual SecurityElement ToXml()
1910  {
1911  return ToXml("System.Security.PermissionSet");
1912  }
1913 
1914  internal byte[] EncodeXml()
1915  {
1916  MemoryStream memoryStream = new MemoryStream();
1917  BinaryWriter binaryWriter = new BinaryWriter(memoryStream, Encoding.Unicode);
1918  binaryWriter.Write(ToXml().ToString());
1919  binaryWriter.Flush();
1920  memoryStream.Position = 2L;
1921  int num = (int)memoryStream.Length - 2;
1922  byte[] array = new byte[num];
1923  memoryStream.Read(array, 0, array.Length);
1924  return array;
1925  }
1926 
1933  [Obsolete("This method is obsolete and shoud no longer be used.")]
1934  public static byte[] ConvertPermissionSet(string inFormat, byte[] inData, string outFormat)
1935  {
1936  throw new NotImplementedException();
1937  }
1938 
1943  {
1944  if (m_CheckedForNonCas)
1945  {
1946  return m_ContainsNonCas;
1947  }
1948  lock (this)
1949  {
1950  if (m_CheckedForNonCas)
1951  {
1952  return m_ContainsNonCas;
1953  }
1954  m_ContainsCas = false;
1955  m_ContainsNonCas = false;
1956  if (IsUnrestricted())
1957  {
1958  m_ContainsCas = true;
1959  }
1960  if (m_permSet != null)
1961  {
1962  PermissionSetEnumeratorInternal permissionSetEnumeratorInternal = new PermissionSetEnumeratorInternal(this);
1963  while (permissionSetEnumeratorInternal.MoveNext() && (!m_ContainsCas || !m_ContainsNonCas))
1964  {
1965  IPermission permission = permissionSetEnumeratorInternal.Current as IPermission;
1966  if (permission != null)
1967  {
1968  if (permission is CodeAccessPermission)
1969  {
1970  m_ContainsCas = true;
1971  }
1972  else
1973  {
1974  m_ContainsNonCas = true;
1975  }
1976  }
1977  }
1978  }
1979  m_CheckedForNonCas = true;
1980  }
1981  return m_ContainsNonCas;
1982  }
1983 
1984  private PermissionSet GetCasOnlySet()
1985  {
1986  if (!m_ContainsNonCas)
1987  {
1988  return this;
1989  }
1990  if (IsUnrestricted())
1991  {
1992  return this;
1993  }
1994  PermissionSet permissionSet = new PermissionSet(fUnrestricted: false);
1995  PermissionSetEnumeratorInternal permissionSetEnumeratorInternal = new PermissionSetEnumeratorInternal(this);
1996  while (permissionSetEnumeratorInternal.MoveNext())
1997  {
1998  IPermission permission = (IPermission)permissionSetEnumeratorInternal.Current;
1999  if (permission is CodeAccessPermission)
2000  {
2001  permissionSet.AddPermission(permission);
2002  }
2003  }
2004  permissionSet.m_CheckedForNonCas = true;
2005  permissionSet.m_ContainsCas = !permissionSet.IsEmpty();
2006  permissionSet.m_ContainsNonCas = false;
2007  return permissionSet;
2008  }
2009 
2010  [SecurityCritical]
2011  private static void SetupSecurity()
2012  {
2014  CodeGroup codeGroup = new UnionCodeGroup(new AllMembershipCondition(), policyLevel.GetNamedPermissionSet("Execution"));
2015  StrongNamePublicKeyBlob blob = new StrongNamePublicKeyBlob("002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293");
2016  CodeGroup group = new UnionCodeGroup(new StrongNameMembershipCondition(blob, null, null), policyLevel.GetNamedPermissionSet("FullTrust"));
2017  StrongNamePublicKeyBlob blob2 = new StrongNamePublicKeyBlob("00000000000000000400000000000000");
2018  CodeGroup group2 = new UnionCodeGroup(new StrongNameMembershipCondition(blob2, null, null), policyLevel.GetNamedPermissionSet("FullTrust"));
2019  CodeGroup group3 = new UnionCodeGroup(new GacMembershipCondition(), policyLevel.GetNamedPermissionSet("FullTrust"));
2020  codeGroup.AddChild(group);
2021  codeGroup.AddChild(group2);
2022  codeGroup.AddChild(group3);
2023  policyLevel.RootCodeGroup = codeGroup;
2024  try
2025  {
2026  AppDomain.CurrentDomain.SetAppDomainPolicy(policyLevel);
2027  }
2028  catch (PolicyException)
2029  {
2030  }
2031  }
2032 
2033  private static void MergePermission(IPermission perm, bool separateCasFromNonCas, ref PermissionSet casPset, ref PermissionSet nonCasPset)
2034  {
2035  if (perm == null)
2036  {
2037  return;
2038  }
2039  if (!separateCasFromNonCas || perm is CodeAccessPermission)
2040  {
2041  if (casPset == null)
2042  {
2043  casPset = new PermissionSet(fUnrestricted: false);
2044  }
2045  IPermission permission = casPset.GetPermission(perm);
2046  IPermission target = casPset.AddPermission(perm);
2047  if (permission != null && !permission.IsSubsetOf(target))
2048  {
2049  throw new NotSupportedException(Environment.GetResourceString("NotSupported_DeclarativeUnion"));
2050  }
2051  }
2052  else
2053  {
2054  if (nonCasPset == null)
2055  {
2056  nonCasPset = new PermissionSet(fUnrestricted: false);
2057  }
2058  IPermission permission2 = nonCasPset.GetPermission(perm);
2059  IPermission target2 = nonCasPset.AddPermission(perm);
2060  if (permission2 != null && !permission2.IsSubsetOf(target2))
2061  {
2062  throw new NotSupportedException(Environment.GetResourceString("NotSupported_DeclarativeUnion"));
2063  }
2064  }
2065  }
2066 
2067  private static byte[] CreateSerialized(object[] attrs, bool serialize, ref byte[] nonCasBlob, out PermissionSet casPset, HostProtectionResource fullTrustOnlyResources, bool allowEmptyPermissionSets)
2068  {
2069  casPset = null;
2070  PermissionSet nonCasPset = null;
2071  for (int i = 0; i < attrs.Length; i++)
2072  {
2073  if (attrs[i] is PermissionSetAttribute)
2074  {
2075  PermissionSet permissionSet = ((PermissionSetAttribute)attrs[i]).CreatePermissionSet();
2076  if (permissionSet == null)
2077  {
2078  throw new ArgumentException(Environment.GetResourceString("Argument_UnableToGeneratePermissionSet"));
2079  }
2080  PermissionSetEnumeratorInternal permissionSetEnumeratorInternal = new PermissionSetEnumeratorInternal(permissionSet);
2081  while (permissionSetEnumeratorInternal.MoveNext())
2082  {
2083  IPermission perm = (IPermission)permissionSetEnumeratorInternal.Current;
2084  MergePermission(perm, serialize, ref casPset, ref nonCasPset);
2085  }
2086  if (casPset == null)
2087  {
2088  casPset = new PermissionSet(fUnrestricted: false);
2089  }
2090  if (permissionSet.IsUnrestricted())
2091  {
2092  casPset.SetUnrestricted(unrestricted: true);
2093  }
2094  }
2095  else
2096  {
2097  IPermission perm2 = ((SecurityAttribute)attrs[i]).CreatePermission();
2098  MergePermission(perm2, serialize, ref casPset, ref nonCasPset);
2099  }
2100  }
2101  if (casPset != null)
2102  {
2103  casPset.FilterHostProtectionPermissions(fullTrustOnlyResources, HostProtectionResource.None);
2104  casPset.ContainsNonCodeAccessPermissions();
2105  if (allowEmptyPermissionSets && casPset.IsEmpty())
2106  {
2107  casPset = null;
2108  }
2109  }
2110  if (nonCasPset != null)
2111  {
2112  nonCasPset.FilterHostProtectionPermissions(fullTrustOnlyResources, HostProtectionResource.None);
2113  nonCasPset.ContainsNonCodeAccessPermissions();
2114  if (allowEmptyPermissionSets && nonCasPset.IsEmpty())
2115  {
2116  nonCasPset = null;
2117  }
2118  }
2119  byte[] result = null;
2120  nonCasBlob = null;
2121  if (serialize)
2122  {
2123  if (casPset != null)
2124  {
2125  result = casPset.EncodeXml();
2126  }
2127  if (nonCasPset != null)
2128  {
2129  nonCasBlob = nonCasPset.EncodeXml();
2130  }
2131  }
2132  return result;
2133  }
2134 
2137  void IDeserializationCallback.OnDeserialization(object sender)
2138  {
2139  NormalizePermissionSet();
2140  m_CheckedForNonCas = false;
2141  }
2142 
2145  [MethodImpl(MethodImplOptions.NoInlining)]
2146  [SecuritySafeCritical]
2147  public static void RevertAssert()
2148  {
2149  StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
2150  SecurityRuntime.RevertAssert(ref stackMark);
2151  }
2152 
2153  internal static PermissionSet RemoveRefusedPermissionSet(PermissionSet assertSet, PermissionSet refusedSet, out bool bFailedToCompress)
2154  {
2155  PermissionSet permissionSet = null;
2156  bFailedToCompress = false;
2157  if (assertSet == null)
2158  {
2159  return null;
2160  }
2161  if (refusedSet != null)
2162  {
2163  if (refusedSet.IsUnrestricted())
2164  {
2165  return null;
2166  }
2167  PermissionSetEnumeratorInternal permissionSetEnumeratorInternal = new PermissionSetEnumeratorInternal(refusedSet);
2168  while (permissionSetEnumeratorInternal.MoveNext())
2169  {
2170  CodeAccessPermission codeAccessPermission = (CodeAccessPermission)permissionSetEnumeratorInternal.Current;
2171  int currentIndex = permissionSetEnumeratorInternal.GetCurrentIndex();
2172  if (codeAccessPermission != null)
2173  {
2174  CodeAccessPermission codeAccessPermission2 = (CodeAccessPermission)assertSet.GetPermission(currentIndex);
2175  try
2176  {
2177  if (codeAccessPermission.Intersect(codeAccessPermission2) != null)
2178  {
2179  if (!codeAccessPermission.Equals(codeAccessPermission2))
2180  {
2181  bFailedToCompress = true;
2182  return assertSet;
2183  }
2184  if (permissionSet == null)
2185  {
2186  permissionSet = assertSet.Copy();
2187  }
2188  permissionSet.RemovePermission(currentIndex);
2189  }
2190  }
2191  catch (ArgumentException)
2192  {
2193  if (permissionSet == null)
2194  {
2195  permissionSet = assertSet.Copy();
2196  }
2197  permissionSet.RemovePermission(currentIndex);
2198  }
2199  }
2200  }
2201  }
2202  if (permissionSet != null)
2203  {
2204  return permissionSet;
2205  }
2206  return assertSet;
2207  }
2208 
2209  internal static void RemoveAssertedPermissionSet(PermissionSet demandSet, PermissionSet assertSet, out PermissionSet alteredDemandSet)
2210  {
2211  alteredDemandSet = null;
2212  PermissionSetEnumeratorInternal permissionSetEnumeratorInternal = new PermissionSetEnumeratorInternal(demandSet);
2213  while (permissionSetEnumeratorInternal.MoveNext())
2214  {
2215  CodeAccessPermission codeAccessPermission = (CodeAccessPermission)permissionSetEnumeratorInternal.Current;
2216  int currentIndex = permissionSetEnumeratorInternal.GetCurrentIndex();
2217  if (codeAccessPermission != null)
2218  {
2219  CodeAccessPermission asserted = (CodeAccessPermission)assertSet.GetPermission(currentIndex);
2220  try
2221  {
2222  if (codeAccessPermission.CheckAssert(asserted))
2223  {
2224  if (alteredDemandSet == null)
2225  {
2226  alteredDemandSet = demandSet.Copy();
2227  }
2228  alteredDemandSet.RemovePermission(currentIndex);
2229  }
2230  }
2231  catch (ArgumentException)
2232  {
2233  }
2234  }
2235  }
2236  }
2237 
2238  internal static bool IsIntersectingAssertedPermissions(PermissionSet assertSet1, PermissionSet assertSet2)
2239  {
2240  bool result = false;
2241  if (assertSet1 != null && assertSet2 != null)
2242  {
2243  PermissionSetEnumeratorInternal permissionSetEnumeratorInternal = new PermissionSetEnumeratorInternal(assertSet2);
2244  while (permissionSetEnumeratorInternal.MoveNext())
2245  {
2246  CodeAccessPermission codeAccessPermission = (CodeAccessPermission)permissionSetEnumeratorInternal.Current;
2247  int currentIndex = permissionSetEnumeratorInternal.GetCurrentIndex();
2248  if (codeAccessPermission != null)
2249  {
2250  CodeAccessPermission codeAccessPermission2 = (CodeAccessPermission)assertSet1.GetPermission(currentIndex);
2251  try
2252  {
2253  if (codeAccessPermission2 != null && !codeAccessPermission2.Equals(codeAccessPermission))
2254  {
2255  result = true;
2256  }
2257  }
2258  catch (ArgumentException)
2259  {
2260  result = true;
2261  }
2262  }
2263  }
2264  }
2265  return result;
2266  }
2267  }
2268 }
Represents a character encoding.To browse the .NET Framework source code for this type,...
Definition: Encoding.cs:15
virtual IPermission SetPermissionImpl(IPermission perm)
Sets a permission to the T:System.Security.PermissionSet, replacing any existing permission of the sa...
bool IsUnrestricted()
Determines whether the T:System.Security.PermissionSet is Unrestricted.
virtual IPermission RemovePermissionImpl(Type permClass)
Removes a permission of a certain type from the set.
virtual IEnumerator GetEnumeratorImpl()
Returns an enumerator for the permissions of the set.
The exception that is thrown when a null reference (Nothing in Visual Basic) is passed to a method th...
override int Read([In] [Out] byte[] buffer, int offset, int count)
Reads a block of bytes from the current stream and writes the data to a buffer.
override long Length
Gets the length of the stream in bytes.
bool ContainsNonCodeAccessPermissions()
Gets a value indicating whether the T:System.Security.PermissionSet contains permissions that are not...
void Deny()
Causes any M:System.Security.PermissionSet.Demand that passes through the calling code for a permissi...
virtual IPermission GetPermissionImpl(Type permClass)
Gets a permission object of the specified type, if it exists in the set.
bool MoveNext()
Advances the enumerator to the next element of the collection.
IEnumerator GetEnumerator()
Returns an enumerator for the permissions of the set.
StreamingContextStates State
Gets the source or destination of the transmitted data.
void Demand()
Forces a T:System.Security.SecurityException at run time if all callers higher in the call stack have...
virtual bool IsSynchronized
Gets a value indicating whether the collection is guaranteed to be thread safe.
virtual void Flush()
Clears all buffers for the current writer and causes any buffered data to be written to the underlyin...
static Encoding Unicode
Gets an encoding for the UTF-16 format using the little endian byte order.
Definition: Encoding.cs:975
Represents the security policy levels for the common language runtime. This class cannot be inherited...
Definition: PolicyLevel.cs:15
Indicates that a class is to be notified when deserialization of the entire object graph has been com...
virtual int Count
Gets the number of elements actually contained in the T:System.Collections.ArrayList.
Definition: ArrayList.cs:2255
BindingFlags
Specifies flags that control binding and the way in which the search for members and types is conduct...
Definition: BindingFlags.cs:10
Definition: __Canon.cs:3
HostProtectionResource
Specifies categories of functionality potentially harmful to the host if invoked by a method or class...
IPermission Copy()
Creates and returns an identical copy of the current permission.
IPermission SetPermission(IPermission perm)
Sets a permission to the T:System.Security.PermissionSet, replacing any existing permission of the sa...
Determines whether an assembly belongs to a code group by testing its strong name....
bool IsSubsetOf(PermissionSet target)
Determines whether the current T:System.Security.PermissionSet is a subset of the specified T:System....
Allows security actions for a T:System.Security.PermissionSet to be applied to code using declarative...
Describes the source and destination of a given serialized stream, and provides an additional caller-...
void AddChild(CodeGroup group)
Adds a child code group to the current code group.
Definition: CodeGroup.cs:240
IPermission AddPermission(IPermission perm)
Adds a specified permission to the T:System.Security.PermissionSet.
PermissionSet Union(PermissionSet other)
Creates a T:System.Security.PermissionSet that is the union of the current T:System....
Contains methods to create types of objects locally or remotely, or obtain references to existing rem...
Definition: Activator.cs:21
Exposes an enumerator, which supports a simple iteration over a non-generic collection....
Definition: IEnumerable.cs:9
SecurityAction
Specifies the security actions that can be performed using declarative security.
Provides information about, and means to manipulate, the current environment and platform....
Definition: Environment.cs:21
Creates a stream whose backing store is memory.To browse the .NET Framework source code for this type...
Definition: MemoryStream.cs:13
override string ToString()
Returns a string representation of the T:System.Security.PermissionSet.
virtual bool IsReadOnly
Gets a value indicating whether the collection is read-only.
Represents a collection that can contain many different types of permissions.
void OnDeserialization(object sender)
Runs when the entire object graph has been deserialized.
bool IsEmpty()
Gets a value indicating whether the T:System.Security.PermissionSet is empty.
Represents the XML object model for encoding security objects. This class cannot be inherited.
static sbyte Max(sbyte val1, sbyte val2)
Returns the larger of two 8-bit signed integers.
Definition: Math.cs:581
IPermission RemovePermission(Type permClass)
Removes a permission of a certain type from the set.
Specifies the base attribute class for declarative security from which T:System.Security....
virtual SecurityElement ToXml()
Creates an XML encoding of the security object and its current state.
Defines the methods that convert permission object state to and from XML element representation.
virtual void FromXml(SecurityElement et)
Reconstructs a security object with a specified state from an XML encoding.
object Current
Gets the element in the collection at the current position of the enumerator.
Definition: IEnumerator.cs:15
Defines the underlying structure of all code access permissions.
Represents the abstract base class from which all implementations of code groups must derive.
Definition: CodeGroup.cs:11
Security policy for all managed code in an application.
PermissionSet(PermissionSet permSet)
Initializes a new instance of the T:System.Security.PermissionSet class with initial values taken fro...
Provides methods for creating, manipulating, searching, and sorting arrays, thereby serving as the ba...
Definition: Array.cs:17
IPermission Intersect(IPermission target)
Creates and returns a permission that is the intersection of the current permission and the specified...
Represents type declarations: class types, interface types, array types, value types,...
Definition: Type.cs:18
virtual void Write(bool value)
Writes a one-byte Boolean value to the current stream, with 0 representing false and 1 representing t...
CodeGroup RootCodeGroup
Gets or sets the root code group for the policy level.
Definition: PolicyLevel.cs:112
MethodImplOptions
Defines the details of how a method is implemented.
PermissionSet(PermissionState state)
Initializes a new instance of the T:System.Security.PermissionSet class with the specified T:System....
Represents a membership condition that matches all code. This class cannot be inherited.
override bool Equals(object obj)
Determines whether the specified T:System.Security.PermissionSet or T:System.Security....
Defines methods implemented by permission types.
Definition: IPermission.cs:7
PermissionSet Intersect(PermissionSet other)
Creates and returns a permission set that is the intersection of the current T:System....
bool IsSubsetOf(IPermission target)
Determines whether the current permission is a subset of the specified permission.
Represents the identity of a software publisher. This class cannot be inherited.
Defines the identity permission for strong names. This class cannot be inherited.
static PolicyLevel CreateAppDomainLevel()
Creates a new policy level for use at the application domain policy level.
Definition: PolicyLevel.cs:304
The exception that is thrown when one of the arguments provided to a method is not valid.
static object CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture)
Creates an instance of the specified type using the constructor that best matches the specified param...
Definition: Activator.cs:57
Defines the identity permission for the URL from which the code originates. This class cannot be inhe...
Defines the identity permission for the zone from which the code originates. This class cannot be inh...
PermissionState
Specifies whether a permission should have all or no access to resources at creation.
virtual object SyncRoot
Gets the root object of the current collection.
void AddAttribute(string name, string value)
Adds a name/value attribute to an XML element.
IPermission GetPermission(Type permClass)
Gets a permission object of the specified type, if it exists in the set.
Specifies that the class can be serialized.
static byte [] ConvertPermissionSet(string inFormat, byte[] inData, string outFormat)
Converts an encoded T:System.Security.PermissionSet from one XML encoding format to another XML encod...
void Assert()
Declares that the calling code can access the resource protected by a permission demand through the c...
override int GetHashCode()
Gets a hash code for the T:System.Security.PermissionSet object that is suitable for use in hashing a...
virtual PermissionSet Copy()
Creates a copy of the T:System.Security.PermissionSet.
StreamingContextStates
Defines a set of flags that specifies the source or destination context for the stream during seriali...
Determines whether an assembly belongs to a code group by testing its global assembly cache membershi...
Provides constants and static methods for trigonometric, logarithmic, and other common mathematical f...
Definition: Math.cs:10
NamedPermissionSet GetNamedPermissionSet(string name)
Returns the T:System.Security.NamedPermissionSet in the current policy level with the specified name.
Definition: PolicyLevel.cs:561
Defines size, enumerators, and synchronization methods for all nongeneric collections.
Definition: ICollection.cs:8
A conditional operation, such as a > b ? a : b in C# or If(a > b, a, b) in Visual Basic.
static void RevertAssert()
Causes any previous M:System.Security.CodeAccessPermission.Assert for the current frame to be removed...
Represents a code group whose policy statement is the union of the current code group's policy statem...
Writes primitive types in binary to a stream and supports writing strings in a specific encoding.
Definition: BinaryWriter.cs:12
void PermitOnly()
Causes any M:System.Security.PermissionSet.Demand that passes through the calling code for any T:Syst...
virtual void CopyTo(Array array, int index)
Copies the permission objects of the set to the indicated location in an T:System....
Manages the stack walk that determines whether all callers in the call stack have the required permis...
Definition: IStackWalk.cs:7
override long Position
Gets or sets the current position within the stream.
The exception that is thrown when policy forbids code to run.
The exception that is thrown when a requested method or operation is not implemented.
Supports a simple iteration over a non-generic collection.
Definition: IEnumerator.cs:9
override string ToString()
Produces a string representation of an XML element and its constituent attributes,...
virtual IPermission AddPermissionImpl(IPermission perm)
Adds a specified permission to the T:System.Security.PermissionSet.
Represents the public key information (called a blob) for a strong name. This class cannot be inherit...
virtual int Count
Gets the number of permission objects contained in the permission set.
IPermission Union(IPermission target)
Creates a permission that is the union of the current permission and the specified permission.
Implements the T:System.Collections.IList interface using an array whose size is dynamically increase...
Definition: ArrayList.cs:14
Defines the identity permission for files originating in the global assembly cache....