欢迎光临散文网 会员登陆 & 注册

C#修改文件夹和文件的NTFS安全权限

2021-11-19 11:05 作者:多情俏狐  | 我要投稿

using Microsoft.Win32;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.IO;

using System.Linq;

using System.Security.AccessControl;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

 

namespace WindowsFormsApp2

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        /// <summary>

        /// 获取系统Chrome的安装路径

        /// </summary>

        /// <param name="exeName">chrome.exe</param>

        /// <returns>string 程序所在字符串</returns>

        public string GetChromeUpdatePath()

        {

            try

            {

                string App = "chrome.exe";

                RegistryKey regKey = Registry.CurrentUser;

                RegistryKey regSubKey = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\" + App, false);

                object objResult = regSubKey.GetValue(string.Empty);

                RegistryValueKind regValueKind = regSubKey.GetValueKind(string.Empty);

                if (regValueKind == Microsoft.Win32.RegistryValueKind.String)

                {

                    string strChromePath=objResult.ToString();

                    int pos = strChromePath.IndexOf(@"\Google\");

                    string strGooglePosition = strChromePath.Substring(0, pos + 7) + @"\Update";

                    return strGooglePosition;

                }

                return "";

            }

            catch

            {

                return "";

            }

        }

 

        /// <summary>

        /// 让文件夹权限最小化,限制其更新和执行

        /// </summary>

        /// <param name="filePath"></param>

        static void AddSecurityControll2File(string filePath)

        {

 

            //获取文件信息

            FileInfo fileInfo = new FileInfo(filePath);

            //获得该文件的访问权限

            System.Security.AccessControl.FileSecurity fileSecurity = fileInfo.GetAccessControl();

            //移除用户组的访问权限规则

            fileSecurity.RemoveAccessRule(new FileSystemAccessRule(@"Administrator", FileSystemRights.FullControl, AccessControlType.Allow));

            //添加用户组的访问权限规则

            fileSecurity.AddAccessRule(new FileSystemAccessRule(@"Administrator", FileSystemRights.Modify, AccessControlType.Deny));

            fileSecurity.AddAccessRule(new FileSystemAccessRule(@"Everyone", FileSystemRights.Modify, AccessControlType.Deny));

 

            //设置访问权限

            fileInfo.SetAccessControl(fileSecurity);

        }

        /// <summary>

        ///让文件权限最小化,限制其更新和执行

        /// </summary>

        /// <param name="dirPath"></param>

        static void AddSecurityControll2Folder(string dirPath)

        {

            //获取文件夹信息

            DirectoryInfo dir = new DirectoryInfo(dirPath);

            //获得该文件夹的所有访问权限

            System.Security.AccessControl.DirectorySecurity dirSecurity = dir.GetAccessControl(AccessControlSections.All);

            //设定文件ACL继承

            InheritanceFlags inherits = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;

            //Administrator用户组的访问权限规则限制(权限最小化)

            FileSystemAccessRule AdministratorFileSystemAccessRuleAllow = new FileSystemAccessRule("Administrator", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow);

            FileSystemAccessRule AdministratorFileSystemAccessRuleDeny = new FileSystemAccessRule("Administrator", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Deny);

            FileSystemAccessRule EveryoneFileSystemAccessRuleDeny = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Deny);

 

            bool isModified = false;

            dirSecurity.ModifyAccessRule(AccessControlModification.Remove, AdministratorFileSystemAccessRuleAllow, out isModified);

            dirSecurity.ModifyAccessRule(AccessControlModification.Add, AdministratorFileSystemAccessRuleDeny, out isModified);

            dirSecurity.ModifyAccessRule(AccessControlModification.Add, EveryoneFileSystemAccessRuleDeny, out isModified);

 

 

 

            //设置访问权限

            dir.SetAccessControl(dirSecurity);

        }

        private void button1_Click(object sender, EventArgs e)

        {

            //

            string UpdatePath = GetChromeUpdatePath();

            AddSecurityControll2Folder(UpdatePath);

 

            string UpdateMainFile = UpdatePath + @"\keygen.exe";

            AddSecurityControll2File( UpdateMainFile);

 

 

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            FolderBrowserDialog path = new FolderBrowserDialog();

            path.ShowDialog();

            string txtPath = path.SelectedPath;

            textBoxPathName.Text = txtPath;

        }

 

    }

}

 


C#修改文件夹和文件的NTFS安全权限的评论 (共 条)

分享到微博请遵守国家法律