/// <summary>
        /// Compare ACE to another object.
        /// </summary>
        /// <param name="obj">The other object.</param>
        /// <returns>True if the other object equals this ACE</returns>
        public override bool Equals(object obj)
        {
            if (ReferenceEquals(obj, this))
            {
                return(true);
            }

            Ace ace = obj as Ace;

            if (ace == null)
            {
                return(false);
            }

            return(ace.Type == Type && ace.Flags == Flags && ace.Sid == Sid && ace.Mask == Mask &&
                   ace.ObjectType == ObjectType && ace.InheritedObjectType == InheritedObjectType &&
                   ace.ServerSid == ServerSid && NtObjectUtils.EqualByteArray(ApplicationData, ace.ApplicationData));
        }