SECURITY_DESCRIPTOR_CONTROL (Winnt.h) - Win32 apps | Microsoft Docs
So I’ve spotted two entries with the same hex value which doesnt make sense for a bitmask especially as the GetSecurityInfo function (aclapi.h) - Win32 apps | Microsoft Docs gives individual memory addresses for a SACL and one for a DACL, in its prototype.
SE_DACL_DEFAULTED 0x0008
and
SE_SACL_DEFAULTED 0x0008
Now if you put these entries in bitmask order (see below) you can see the two “defaulted”'s with the same bitmask, but the SE_DACL_PRESENT (04h) is before SE_DACL_DEFAULTED (08h) so I would expect the same for the SACL’s, but they are not, so I’m wondering if I am seeing a mistake on a webpage.
The reason I say “mistake” is because other times, information has been missing from the MS api webpages, so I’ve even gone and checked the webpage on someone else’s device unconnected to me to see if they see the same thing (using computers connected to the net at PC World can be useful here), but I’m also massively aware that alot of these webservers are akamai hosted just like this website is hosted on Cloudfare, so are mirrors of originals, in the EU and I know alot of countries are into hacking each other for various reasons.
So do you think this is a mistake?
Edit. Further down the SACL_Protected and DACL_Protected have separate values.
IS_SE_OWNER_DEFAULTED Equate(0001h) !Indicates that the SID of the owner of the security descriptor was provided by a default mechanism. This flag can be used by a resource manager to identify objects whose owner was set by a default mechanism. To set this flag, use the SetSecurityDescriptorOwner function.
IS_SE_GROUP_DEFAULTED Equate(0002h) !Indicates that the security identifier (SID) of the security descriptor group was provided by a default mechanism. This flag can be used by a resource manager to identify objects whose security descriptor group was set by a default mechanism. To set this flag, use the SetSecurityDescriptorGroup function.
IS_SE_DACL_PRESENT Equate(0004h) !Indicates a security descriptor that has a DACL. If this flag is not set, or if this flag is set and the DACL is NULL, the security descriptor allows full access to everyone.
!This flag is used to hold the security information specified by a caller until the security descriptor is associated with a securable object. After the security descriptor is associated with a securable object, the SE_DACL_PRESENT flag is always set in the security descriptor control.
!To set this flag, use the SetSecurityDescriptorDacl function.
IS_SE_DACL_DEFAULTED Equate(0008h) !Indicates a security descriptor with a default DACL. For example, if the creator an object does not specify a DACL, the object receives the default DACL from the access token of the creator. This flag can affect how the system treats the DACL with respect to ACE inheritance. The system ignores this flag if the SE_DACL_PRESENT flag is not set.
!This flag is used to determine how the final DACL on the object is to be computed and is not stored physically in the security descriptor control of the securable object.
!To set this flag, use the SetSecurityDescriptorDacl function.
!???? Normally they are unique and if the DACLS are to go by, then this should be whatever the next bit mask is because DACL Present is before DACL Default
IS_SE_SACL_DEFAULTED Equate(0008h) !A default mechanism, rather than the original provider of the security descriptor, provided the SACL. This flag can affect how the system treats the SACL, with respect to ACE inheritance. The system ignores this flag if the SE_SACL_PRESENT flag is not set. To set this flag, use the SetSecurityDescriptorSacl function.
!???? Normally they are unique and if the DACLS are to go by, then this should be whatever the next bit mask is because DACL Present is before DACL Default
IS_SE_SACL_PRESENT Equate(0010h) !Indicates a security descriptor that has a SACL. To set this flag, use the SetSecurityDescriptorSacl function.
IS_SE_DACL_AUTO_INHERIT_REQ Equate(0100h) !Indicates a required security descriptor in which the discretionary access control list (DACL) is set up to support automatic propagation of inheritable access control entries (ACEs) to existing child objects.
!For access control lists (ACLs) that support auto inheritance, this bit is always set. Protected servers can call the ConvertToAutoInheritPrivateObjectSecurity function to convert a security descriptor and set this flag.
IS_SE_SACL_AUTO_INHERIT_REQ Equate(0200h) !Indicates a required security descriptor in which the system access control list (SACL) is set up to support automatic propagation of inheritable ACEs to existing child objects.
!The system sets this bit when it performs the automatic inheritance algorithm for the object and its existing child objects. To convert a security descriptor and set this flag, protected servers can call the ConvertToAutoInheritPrivateObjectSecurity function.
IS_SE_DACL_AUTO_INHERITED Equate(0400h) !Indicates a security descriptor in which the discretionary access control list (DACL) is set up to support automatic propagation of inheritable access control entries (ACEs) to existing child objects.
!For access control lists (ACLs) that support auto inheritance, this bit is always set. Protected servers can call the ConvertToAutoInheritPrivateObjectSecurity function to convert a security descriptor and set this flag.
IS_SE_SACL_AUTO_INHERITED Equate(0800h) !Indicates a security descriptor in which the system access control list (SACL) is set up to support automatic propagation of inheritable ACEs to existing child objects.
!The system sets this bit when it performs the automatic inheritance algorithm for the object and its existing child objects. To convert a security descriptor and set this flag, protected servers can call the ConvertToAutoInheritPrivateObjectSecurity function.
IS_SE_DACL_PROTECTED Equate(1000h) !Prevents the DACL of the security descriptor from being modified by inheritable ACEs. To set this flag, use the SetSecurityDescriptorControl function.
IS_SE_SACL_PROTECTED Equate(2000h) !Prevents the SACL of the security descriptor from being modified by inheritable ACEs. To set this flag, use the SetSecurityDescriptorControl function.
IS_SE_RM_CONTROL_VALID Equate(4000h) !Indicates that the resource manager control is valid.
IS_SE_SELF_RELATIVE Equate(8000h) !Indicates a self-relative security descriptor. If this flag is not set, the security descriptor is in absolute format. For more information, see Absolute and Self-Relative Security Descriptors.