private void ParseSddl(string sddlForm) { ControlFlags flags = ControlFlags.None; int pos = 0; while (pos < sddlForm.Length - 2) { switch (sddlForm.Substring(pos, 2)) { case "O:": pos += 2; Owner = SecurityIdentifier.ParseSddlForm(sddlForm, ref pos); break; case "G:": pos += 2; Group = SecurityIdentifier.ParseSddlForm(sddlForm, ref pos); break; case "D:": pos += 2; DiscretionaryAcl = RawAcl.ParseSddlForm(sddlForm, true, ref flags, ref pos); flags |= ControlFlags.DiscretionaryAclPresent; break; case "S:": pos += 2; SystemAcl = RawAcl.ParseSddlForm(sddlForm, false, ref flags, ref pos); flags |= ControlFlags.SystemAclPresent; break; default: throw new ArgumentException("Invalid SDDL.", "sddlForm"); } } if (pos != sddlForm.Length) { throw new ArgumentException("Invalid SDDL.", "sddlForm"); } SetFlags(flags); }