5

特定のファイルのアクセス許可を変更して、Windows マシンの「Everyone」グループのアクセスを許可/禁止するユーティリティを作成しています。これまでのところ、次のコードを使用して、「Everyone」のフル コントロール アクセス許可をファイルに設定および削除することができました。

void AddFullControl()
{
    FileSecurity fsFile = File.GetAccessControl("file.tmp");
    fsFile.SetAccessRule( new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
    File.SetAccessControl("file.tmp", fsFile);
}

void RemoveFullControl()
{
    FileSecurity fsFile = File.GetAccessControl("file.tmp");
    fsFile.SetAccessRule( new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Deny));
    File.SetAccessControl("file.tmp", fsFile);
}

ただし、「Everyone」が既にフル コントロールのアクセス許可を持っているかどうかを確認したいのですが、これを行う方法を見つけることができませんでした。Google 検索の後に Google 検索を精査するのに数日を費やしましたが、これを行う方法を見つけることができませんでした。誰かが私を正しい方向に向けたり、これを行う方法の例を教えてもらえますか?

更新: これは非常に迅速に回答され、機能する C# コードを思いつくことができました。私が作成したコードは次のとおりです。

void CheckAccess()
{
    AuthorizationRuleCollection arcFile = File.GetAccessControl("file.tmp").GetAccessRules(true, true, typeof(System.Security.Principal.SecurityIdentifier));
    foreach (AuthorizationRule arFile in arcFile)
    {
        if (arFile.IdentityReference.Value == "Everyone")
        {
            FileSystemAccessRule fasrFile = (FileSystemAccessRule)arFile;
            if (fasrFile.AccessControlType == AccessControlType.Allow && fasrFile.FileSystemRights.HasFlag(FileSystemRights.FullControl))
            {
                MessageBox.Show("file.tmp already has Full Control permissions granted to Everyone");
            }
        }
    }
}
4

3 に答える 3