mscorlib(4.0.0.0) API with additions
DiscretionaryAcl.cs
2 
4 {
6  public sealed class DiscretionaryAcl : CommonAcl
7  {
8  private static SecurityIdentifier _sidEveryone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
9 
10  private bool everyOneFullAccessForNullDacl;
11 
12  internal bool EveryOneFullAccessForNullDacl
13  {
14  get
15  {
16  return everyOneFullAccessForNullDacl;
17  }
18  set
19  {
20  everyOneFullAccessForNullDacl = value;
21  }
22  }
23 
30  public DiscretionaryAcl(bool isContainer, bool isDS, int capacity)
31  : this(isContainer, isDS, isDS ? GenericAcl.AclRevisionDS : GenericAcl.AclRevision, capacity)
32  {
33  }
34 
42  public DiscretionaryAcl(bool isContainer, bool isDS, byte revision, int capacity)
43  : base(isContainer, isDS, revision, capacity)
44  {
45  }
46 
53  public DiscretionaryAcl(bool isContainer, bool isDS, RawAcl rawAcl)
54  : this(isContainer, isDS, rawAcl, trusted: false)
55  {
56  }
57 
58  internal DiscretionaryAcl(bool isContainer, bool isDS, RawAcl rawAcl, bool trusted)
59  : base(isContainer, isDS, (rawAcl == null) ? new RawAcl(isDS ? GenericAcl.AclRevisionDS : GenericAcl.AclRevision, 0) : rawAcl, trusted, isDacl: true)
60  {
61  }
62 
69  public void AddAccess(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags)
70  {
71  CheckAccessType(accessType);
72  CheckFlags(inheritanceFlags, propagationFlags);
73  everyOneFullAccessForNullDacl = false;
74  AddQualifiedAce(sid, (accessType != 0) ? AceQualifier.AccessDenied : AceQualifier.AccessAllowed, accessMask, GenericAce.AceFlagsFromInheritanceFlags(inheritanceFlags, propagationFlags), ObjectAceFlags.None, Guid.Empty, Guid.Empty);
75  }
76 
83  public void SetAccess(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags)
84  {
85  CheckAccessType(accessType);
86  CheckFlags(inheritanceFlags, propagationFlags);
87  everyOneFullAccessForNullDacl = false;
88  SetQualifiedAce(sid, (accessType != 0) ? AceQualifier.AccessDenied : AceQualifier.AccessAllowed, accessMask, GenericAce.AceFlagsFromInheritanceFlags(inheritanceFlags, propagationFlags), ObjectAceFlags.None, Guid.Empty, Guid.Empty);
89  }
90 
99  public bool RemoveAccess(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags)
100  {
101  CheckAccessType(accessType);
102  everyOneFullAccessForNullDacl = false;
103  return RemoveQualifiedAces(sid, (accessType != 0) ? AceQualifier.AccessDenied : AceQualifier.AccessAllowed, accessMask, GenericAce.AceFlagsFromInheritanceFlags(inheritanceFlags, propagationFlags), saclSemantics: false, ObjectAceFlags.None, Guid.Empty, Guid.Empty);
104  }
105 
112  public void RemoveAccessSpecific(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags)
113  {
114  CheckAccessType(accessType);
115  everyOneFullAccessForNullDacl = false;
116  RemoveQualifiedAcesSpecific(sid, (accessType != 0) ? AceQualifier.AccessDenied : AceQualifier.AccessAllowed, accessMask, GenericAce.AceFlagsFromInheritanceFlags(inheritanceFlags, propagationFlags), ObjectAceFlags.None, Guid.Empty, Guid.Empty);
117  }
118 
124  {
125  AddAccess(accessType, sid, rule.AccessMask, rule.InheritanceFlags, rule.PropagationFlags, rule.ObjectFlags, rule.ObjectType, rule.InheritedObjectType);
126  }
127 
137  public void AddAccess(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, ObjectAceFlags objectFlags, Guid objectType, Guid inheritedObjectType)
138  {
139  if (!base.IsDS)
140  {
141  throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_OnlyValidForDS"));
142  }
143  CheckAccessType(accessType);
144  CheckFlags(inheritanceFlags, propagationFlags);
145  everyOneFullAccessForNullDacl = false;
146  AddQualifiedAce(sid, (accessType != 0) ? AceQualifier.AccessDenied : AceQualifier.AccessAllowed, accessMask, GenericAce.AceFlagsFromInheritanceFlags(inheritanceFlags, propagationFlags), objectFlags, objectType, inheritedObjectType);
147  }
148 
154  {
155  SetAccess(accessType, sid, rule.AccessMask, rule.InheritanceFlags, rule.PropagationFlags, rule.ObjectFlags, rule.ObjectType, rule.InheritedObjectType);
156  }
157 
167  public void SetAccess(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, ObjectAceFlags objectFlags, Guid objectType, Guid inheritedObjectType)
168  {
169  if (!base.IsDS)
170  {
171  throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_OnlyValidForDS"));
172  }
173  CheckAccessType(accessType);
174  CheckFlags(inheritanceFlags, propagationFlags);
175  everyOneFullAccessForNullDacl = false;
176  SetQualifiedAce(sid, (accessType != 0) ? AceQualifier.AccessDenied : AceQualifier.AccessAllowed, accessMask, GenericAce.AceFlagsFromInheritanceFlags(inheritanceFlags, propagationFlags), objectFlags, objectType, inheritedObjectType);
177  }
178 
185  {
186  return RemoveAccess(accessType, sid, rule.AccessMask, rule.InheritanceFlags, rule.PropagationFlags, rule.ObjectFlags, rule.ObjectType, rule.InheritedObjectType);
187  }
188 
200  public bool RemoveAccess(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, ObjectAceFlags objectFlags, Guid objectType, Guid inheritedObjectType)
201  {
202  if (!base.IsDS)
203  {
204  throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_OnlyValidForDS"));
205  }
206  CheckAccessType(accessType);
207  everyOneFullAccessForNullDacl = false;
208  return RemoveQualifiedAces(sid, (accessType != 0) ? AceQualifier.AccessDenied : AceQualifier.AccessAllowed, accessMask, GenericAce.AceFlagsFromInheritanceFlags(inheritanceFlags, propagationFlags), saclSemantics: false, objectFlags, objectType, inheritedObjectType);
209  }
210 
216  {
218  }
219 
229  public void RemoveAccessSpecific(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, ObjectAceFlags objectFlags, Guid objectType, Guid inheritedObjectType)
230  {
231  if (!base.IsDS)
232  {
233  throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_OnlyValidForDS"));
234  }
235  CheckAccessType(accessType);
236  everyOneFullAccessForNullDacl = false;
237  RemoveQualifiedAcesSpecific(sid, (accessType != 0) ? AceQualifier.AccessDenied : AceQualifier.AccessAllowed, accessMask, GenericAce.AceFlagsFromInheritanceFlags(inheritanceFlags, propagationFlags), objectFlags, objectType, inheritedObjectType);
238  }
239 
240  internal override void OnAclModificationTried()
241  {
242  everyOneFullAccessForNullDacl = false;
243  }
244 
245  internal static DiscretionaryAcl CreateAllowEveryoneFullAccess(bool isDS, bool isContainer)
246  {
247  DiscretionaryAcl discretionaryAcl = new DiscretionaryAcl(isContainer, isDS, 1);
248  discretionaryAcl.AddAccess(AccessControlType.Allow, _sidEveryone, -1, isContainer ? (InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit) : InheritanceFlags.None, PropagationFlags.None);
249  discretionaryAcl.everyOneFullAccessForNullDacl = true;
250  return discretionaryAcl;
251  }
252  }
253 }
DiscretionaryAcl(bool isContainer, bool isDS, RawAcl rawAcl)
Initializes a new instance of the T:System.Security.AccessControl.DiscretionaryAcl class with the spe...
PropagationFlags
Specifies how Access Control Entries (ACEs) are propagated to child objects. These flags are signific...
internal int AccessMask
Gets the access mask for this rule.
void RemoveAccessSpecific(AccessControlType accessType, SecurityIdentifier sid, ObjectAccessRule rule)
Removes the specified Access Control Entry (ACE) from the current T:System.Security....
void SetAccess(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, ObjectAceFlags objectFlags, Guid objectType, Guid inheritedObjectType)
Sets the specified access control for the specified T:System.Security.Principal.SecurityIdentifier ob...
Definition: __Canon.cs:3
Guid InheritedObjectType
Gets the type of child object that can inherit the T:System.Security.AccessControl....
void AddAccess(AccessControlType accessType, SecurityIdentifier sid, ObjectAccessRule rule)
Adds an Access Control Entry (ACE) with the specified settings to the current T:System....
Represents an Access Control Entry (ACE), and is the base class for all other ACE classes.
Definition: GenericAce.cs:6
Represents an Access Control List (ACL).
Definition: RawAcl.cs:6
void AddAccess(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, ObjectAceFlags objectFlags, Guid objectType, Guid inheritedObjectType)
Adds an Access Control Entry (ACE) with the specified settings to the current T:System....
void RemoveAccessSpecific(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags)
Removes the specified Access Control Entry (ACE) from the current T:System.Security....
Provides information about, and means to manipulate, the current environment and platform....
Definition: Environment.cs:21
Guid ObjectType
Gets the type of object to which the T:System.Security.AccessControl.ObjectAccessRule applies.
Represents a globally unique identifier (GUID).To browse the .NET Framework source code for this type...
Definition: Guid.cs:14
A logical OR of F:System.Security.AccessControl.AceFlags.ObjectInherit, F:System.Security....
void AddAccess(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags)
Adds an Access Control Entry (ACE) with the specified settings to the current T:System....
ObjectAceFlags ObjectFlags
Gets flags that specify if the P:System.Security.AccessControl.ObjectAccessRule.ObjectType and P:Syst...
bool RemoveAccess(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags)
Removes the specified access control rule from the current T:System.Security.AccessControl....
bool RemoveAccess(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, ObjectAceFlags objectFlags, Guid objectType, Guid inheritedObjectType)
Removes the specified access control rule from the current T:System.Security.AccessControl....
bool RemoveAccess(AccessControlType accessType, SecurityIdentifier sid, ObjectAccessRule rule)
Removes the specified access control rule from the current T:System.Security.AccessControl....
Represents an access control list (ACL) and is the base class for the T:System.Security....
Definition: CommonAcl.cs:6
static readonly byte AclRevisionDS
The revision level of the current T:System.Security.AccessControl.GenericAcl. This value is returned ...
Definition: GenericAcl.cs:12
Represents a combination of a user's identity, an access mask, and an access control type (allow or d...
AccessControlType
Specifies whether an T:System.Security.AccessControl.AccessRule object is used to allow or deny acces...
DiscretionaryAcl(bool isContainer, bool isDS, byte revision, int capacity)
Initializes a new instance of the T:System.Security.AccessControl.DiscretionaryAcl class with the spe...
InheritanceFlags InheritanceFlags
Gets the value of flags that determine how this rule is inherited by child objects.
void SetAccess(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags)
Sets the specified access control for the specified T:System.Security.Principal.SecurityIdentifier ob...
Represents an access control list (ACL) and is the base class for the T:System.Security....
Definition: GenericAcl.cs:6
AceQualifier
Specifies the function of an access control entry (ACE).
Definition: AceQualifier.cs:4
Represents a security identifier (SID) and provides marshaling and comparison operations for SIDs.
void RemoveAccessSpecific(AccessControlType accessType, SecurityIdentifier sid, int accessMask, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, ObjectAceFlags objectFlags, Guid objectType, Guid inheritedObjectType)
Removes the specified Access Control Entry (ACE) from the current T:System.Security....
static readonly byte AclRevision
The revision level of the current T:System.Security.AccessControl.GenericAcl. This value is returned ...
Definition: GenericAcl.cs:9
The exception that is thrown when a method call is invalid for the object's current state.
void SetAccess(AccessControlType accessType, SecurityIdentifier sid, ObjectAccessRule rule)
Sets the specified access control for the specified T:System.Security.Principal.SecurityIdentifier ob...
static readonly Guid Empty
A read-only instance of the T:System.Guid structure whose value is all zeros.
Definition: Guid.cs:126
Represents a Discretionary Access Control List (DACL).
InheritanceFlags
Inheritance flags specify the semantics of inheritance for access control entries (ACEs).
ObjectAceFlags
Specifies the presence of object types for Access Control Entries (ACEs).
WellKnownSidType
Defines a set of commonly used security identifiers (SIDs).
PropagationFlags PropagationFlags
Gets the value of the propagation flags, which determine how inheritance of this rule is propagated t...