вторник, 24 апреля 2012 г.

Get share folder audit permissions using .net C#


    class NetDirectorySecurity : NativeObjectSecurity
    {
        public NetDirectorySecurity(string ResName, AccessControlSections IncludeSections)
            : base(true, ResourceType.LMShare, ResName, IncludeSections)
        {
        }

        private static FileSystemRights RightsFromAccessMask(int accessMask)
        {
            return (FileSystemRights)accessMask;
        }

        public sealed override AccessRule AccessRuleFactory(IdentityReference identityReference, int accessMask,
            bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)
        {
            return new FileSystemAccessRule(identityReference, RightsFromAccessMask(accessMask), inheritanceFlags, propagationFlags, type);
        }

        public sealed override AuditRule AuditRuleFactory(IdentityReference identityReference, int accessMask,
            bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)
        {
            return new FileSystemAuditRule(identityReference, RightsFromAccessMask(accessMask), inheritanceFlags, propagationFlags, flags);
        }

        public override Type AccessRightType { get { return typeof(FileSystemRights); } }
        public override Type AccessRuleType { get { return typeof(FileSystemAccessRule); } }
        public override Type AuditRuleType { get { return typeof(FileSystemAuditRule); } }
    }



NetDirectorySecurity nds = new NetDirectorySecurity(sharedName, AccessControlSections.Audit);

                        var permissions = nds.GetAuditRules(true, true, typeof(SecurityIdentifier));
                        FileSystemRights failRights = 0;
                        FileSystemRights successRights = 0;
                        FileSystemRights noneRights = 0;

                        var auditRules = permissions.Cast<FileSystemAuditRule>().Where(ar => ar.IdentityReference.Value == sid).ToList();

                        if (auditRules.Count == 0)
                        {
                            successfullAuditMask = 0;
                            failedAuditMask = 0;
                        }

                        var auditFlagsValues = Enum.GetValues(typeof(AuditFlags));

                        foreach (var auditRule in auditRules)
                        {
                            var closureRule = auditRule;

                            foreach (AuditFlags value in auditFlagsValues.Cast<AuditFlags>().Where(value => (closureRule.AuditFlags & value) == value))
                            {
                                switch (value)
                                {
                                    case AuditFlags.Failure:
                                        failRights |= auditRule.FileSystemRights;
                                        break;
                                    case AuditFlags.Success:
                                        successRights |= auditRule.FileSystemRights;
                                        break;
                                    case AuditFlags.None:
                                        noneRights |= auditRule.FileSystemRights;
                                        break;
                                }
                            }
                        }

                        successfullAuditMask = (int)successRights;
                        failedAuditMask = (int)failRights;

Комментариев нет:

Отправить комментарий