1

誰かが正しいパスワードでアプリケーションにログインするまで、フォルダへのフル コントロール アクセスをすべて拒否するアプリケーションを作成しました。ロックプログラムの私のソースは次のとおりです。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Security.AccessControl;
using System.DirectoryServices;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string Directoryd = "D:";
            string mydirectory = Directoryd + "\\" + "rs\\";
            if (!Directory.Exists(mydirectory))
            {
                Directory.CreateDirectory(mydirectory);
            }
            DirectoryInfo di = new DirectoryInfo(mydirectory);
            DirectorySecurity ds = di.GetAccessControl();


            ds.AddAccessRule(new FileSystemAccessRule(
                @"everyone",
                FileSystemRights.FullControl,
                AccessControlType.Deny));

            di.SetAccessControl(ds);
        }      
    }
}

これにより、フォルダー D:/rs/ へのすべてのアクセスが拒否されます。次のように、ボタンを押してフォルダーのロックを解除するスクリプトを考えました。

private void login_Click(object sender, EventArgs e)
{
    string username = text1.Text;
    string password = text2.Text;
    if(username == "aname" && password == "password")
    {
        string Directoryd = "D:";
        string mydirectory = Directoryd + "\\" + "rs\\";
        if (!Directory.Exists(mydirectory))
        {
            Directory.CreateDirectory(mydirectory);
        }
        DirectoryInfo di = new DirectoryInfo(mydirectory);
        DirectorySecurity ds = di.GetAccessControl();


        ds.AddAccessRule(new FileSystemAccessRule(
            @"everyone",
            FileSystemRights.FullControl, 
            AccessControlType.Allow));

        di.SetAccessControl(ds);
    }
}

しかし、これはアクセス拒否エラーを示しています。このエラーを回避するにはどうすればよいですか?

4

2 に答える 2

2

権限の拒否は、許可よりも優先度が高くなります。別のアクセス許可を追加するのではなく、拒否アクセス許可を削除する必要があります。

于 2012-07-14T05:24:00.177 に答える
0

これを置き換えてみてください:

ds.AddAccessRule(new FileSystemAccessRule(@"everyone", FileSystemRights.FullControl, AccessControlType.Allow));
di.SetAccessControl(ds);

ds.AddAccessRule(new FileSystemAccessRule(@"everyone", FileSystemRights.FullControl, AccessControlType.Deny));
di.RemoveAccessRule(ds);

これが役立つことを願っています。

于 2015-09-23T14:04:34.363 に答える