zoukankan      html  css  js  c++  java
  • 给文件夹添加用户权限(转)

    public static void SetDACL(string filePath, string userName)
        {
            //获取帐户信息
            int cbSid = 100;
            byte[] userSid = new byte[28];
            StringBuilder domainName = new StringBuilder(255);
            int domainNameLength = 255;
            int sidType = 255;
            bool result = LookupAccountName(null, userName, userSid, ref cbSid, domainName, ref domainNameLength, ref sidType);

            if (!result)
                return;

            //获取文件描述符
            ManagementPath path = new ManagementPath();
            path.Server = ".";
            path.NamespacePath = @"\root\cimv2";
            path.RelativePath = @"Win32_LogicalFileSecuritySetting.Path='" + filePath + "'";
            ManagementObject dir = new ManagementObject(path);
            ManagementBaseObject outParams = dir.InvokeMethod("GetSecurityDescriptor", null, null);

            if (((uint)(outParams.Properties["ReturnValue"].Value)) != 0)
            {
                throw new Exception("获取文件描述符失败");
            }
            ManagementBaseObject Descriptor = ((ManagementBaseObject)(outParams.Properties["Descriptor"].Value));

            //获取访问控制列表
            ManagementBaseObject[] DaclObject = ((ManagementBaseObject[])(Descriptor.Properties["Dacl"].Value));

            //复制一个访问控制项
            ManagementBaseObject ace = (ManagementBaseObject)DaclObject[0].Clone();

            //设置访问控制项属性
            ManagementBaseObject trustee = (ManagementBaseObject)ace.Properties["Trustee"].Value;
            //   return ace.Properties["AccessMask"].Value.ToString();
            trustee.Properties["Domain"].Value = domainName.ToString();
            trustee.Properties["Name"].Value = userName;
            trustee.Properties["SID"].Value = userSid;
            trustee.Properties["SidLength"].Value = 28;//trustee.Properties["SIDString"].Value="S-1-5-21-602162358-708899826-854245398-1005";

            ace.Properties["Trustee"].Value = trustee;
            ace.Properties["AccessMask"].Value = 1245631;//2032127完全控制//1245631修改权限
            ace.Properties["AceFlags"].Value = 3;//允许AccessMask指定的访问级别
            ace.Properties["AceType"].Value = 0;//允许AccessMask指定的访问级别

            //复制一份访问控制列表,并将以上生成的访问控制项添加到其后。
            ManagementBaseObject[] newDacl = new ManagementBaseObject[DaclObject.Length + 1];
            for (int i = 0; i < DaclObject.Length; i++)
            {
                newDacl[i] = DaclObject[i];
            }

            newDacl[DaclObject.Length] = ace;
            //将安全描述符的DACL属性设为新生成的访问控制列表
            Descriptor.Properties["Dacl"].Value = newDacl;

            //设置安全描述符
            dir.Scope.Options.EnablePrivileges = true;

            ManagementBaseObject inProperties = dir.GetMethodParameters("SetSecurityDescriptor");
            inProperties["Descriptor"] = Descriptor;
            outParams = dir.InvokeMethod("SetSecurityDescriptor", inProperties, null);
        }

  • 相关阅读:
    《Linux内核设计与实现》读书笔记(二)- 内核开发的准备
    《Linux内核设计与实现》读书笔记(一)-内核简介
    Redis常用命令
    redis——学习之路五(简单的C#使用redis)
    Redis——学习之路四(初识主从配置)
    Redis——学习之路三(初识redis config配置)
    Redis——学习之路二(初识redis服务器命令)
    Redis——学习之路一(初识redis)
    SQL Server 查询分析器提供的所有快捷方式(快捷键)
    降维中的特征选择(转)
  • 原文地址:https://www.cnblogs.com/skyblue/p/837364.html
Copyright © 2011-2022 走看看