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);
        }

  • 相关阅读:
    implement the bucket sort and some analysis
    冪運匴
    polynomial multiplication
    WinRAR(WinZip)压缩与解压实现(C#版Window平台)
    Windows 窗体计时器事件,则不引发在 Windows 服务
    VS 2008智能提示是英文的怎么改成中文的?
    C#_SQL数据访问帮助类
    C#_DllImport用法和路径问题
    Office2003/2007/2010强力卸载工具下载
    Windows_装的是2008R2系统,在电脑属性里显示内存12G(可用4G)
  • 原文地址:https://www.cnblogs.com/skyblue/p/837364.html
Copyright © 2011-2022 走看看