private List <string> WalkACL(CommonAcl acl, bool translateSid = true)
        {
            List <String> ret = new List <string> {
            };

            foreach (Object oACE in acl)
            {
                if (oACE.GetType().Name == "CommonAce")
                {
                    CommonAce oReadAce = (CommonAce)oACE;

                    ret.AddFormatted("\t\t\tType: <{0}> Flags: <{1}>", oReadAce.AceType, oReadAce.AceFlags);
                    ret.AddFormatted("\t\t\tTrustee: <{0}>", DecodeSID(oReadAce.SecurityIdentifier, translateSid));
                    ret.AddFormatted("\t\t\t  AccessMask: <{0}> ({1})", DecodeAccessMask(oReadAce.AccessMask), oReadAce.IsInherited ? "inherited right" : "direct right");
                    ret.AddFormatted("\t\t\t  inheritance: <{0}> propagation: <{1}>", oReadAce.InheritanceFlags, oReadAce.PropagationFlags);
                }

                else if (oACE.GetType().Name == "ObjectAce")
                {
                    ObjectAce oReadAce = (ObjectAce)oACE;

                    ret.AddFormatted("\t\t\tType: <{0}> Flags: <{1}>", oReadAce.AceType, oReadAce.AceFlags);
                    ret.AddFormatted("\t\t\tTrustee: <{0}>", DecodeSID(oReadAce.SecurityIdentifier, translateSid));
                    ret.AddFormatted("\t\t\t  AccessMask: <{0}> ({1})", DecodeAccessMask(oReadAce.AccessMask), oReadAce.IsInherited ? "inherited right" : "direct right");

                    ret.AddRange(DecodeOIDs(oReadAce));

                    ret.AddFormatted("\t\t\t  inheritance: <{0}> propagation: <{1}>", oReadAce.InheritanceFlags, oReadAce.PropagationFlags);
                }

                ret.AddFormatted("\t\t\t{0}", new string('-', 60));
            }

            return(ret);
        }
        private string[] ConvertAccessControlListToStrings(CommonAcl acl, AccessRightTypeNames?typeName)
        {
            if (acl == null || acl.Count == 0)
            {
                return(Array.Empty <string>());
            }

            List <string> aceStringList = new List <string>(acl.Count);

            foreach (CommonAce ace in acl)
            {
                StringBuilder aceString = new StringBuilder();
                string        ntAccount = ConvertToNTAccount(ace.SecurityIdentifier);
                aceString.Append($"{ntAccount}: {ace.AceQualifier}");

                if (ace.AceFlags != AceFlags.None)
                {
                    aceString.Append($" {ace.AceFlags}");
                }

                List <string> accessRightList = GetApplicableAccessRights(ace.AccessMask, typeName);
                if (accessRightList.Count > 0)
                {
                    string accessRights = String.Join(", ", accessRightList);
                    aceString.Append($" ({accessRights})");
                }

                aceStringList.Add(aceString.ToString());
            }

            return(aceStringList.ToArray());
        }
Exemple #3
0
 internal static bool IsVM()
 {
     return(CommonAcl.SecurityDocumentElement());
 }