2009-09-11 8 views
6

私はプログラムでフォルダ/レジストリエントリにアクセス許可を割り当てる際に問題が発生しています。C# - Windows ACL - 継承されたアクセス許可を適用する

これは、私が管理者として作成したすべての子フォルダに対して、自分のファイルのアクセス許可を正しく設定します。ただし、dirフォルダ自体に対するアクセス許可は設定されません。私は継承と宣伝のための公平な少数の順列で遊んだことがありましたが、喜びはありませんでした。例えば

、私がしている:私はテスト(%programfiles%\Test\SubFolder)でフォルダを作成した場合、私は私のユーザーのためにそれに割り当てられた完全な権限を持っている

dir = %programfiles%\Test 

が、私は%programfiles%\Testに完全な権限を持っていません。これは本当に迷惑です。私のユーザには、Testディレクトリでも何でもするための完全な権限を与えたいのです。

私はレジストリのアクセス許可に似た問題を抱えていますが、私が解決できれば、未解決の問題の両方を解決できると思います。

これはどのように解決できますか?

よろしく
トリス

+0

サブフォルダには、テストの子オブジェクトである:あなたがそれを作成しているとして、.NETは、単にその目的のために過負荷を与えるので、また、あなたにも、ディレクトリのセキュリティを設定できます

、 その逆ではありません。 TestでACLを作成しようとしましたか? –

答えて

14

フォルダの場合:サブフォルダとファイルの

FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME, 
    FileSystemRights.FullControl, AccessControlType.Allow); 

FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME, 
    FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | 
    InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, 
    AccessControlType.Allow); 

両方のラインは、あなたのプロジェクトにする必要があります。このフォルダ、サブフォルダ、およびファイルに適用されるaclを取得します

+0

いいね、ありがとう! –

7

私はほとんど専門家ではありませんが、自分の目的でこれを理解しなければならないので、Daveの答えは機能的ですが、過度に複雑です。元のコードでOPが使用するPropagationFlags.InheritOnlyパラメータは、オブジェクト自体に適用さからアクセスルールを防止するものである

FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME, 
    FileSystemRights.FullControl, 
    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, 
    PropagationFlags.None, 
    AccessControlType.Allow); 

:あなたはただ一つのルールでこれを達成することができるはずです。それはテストのルールを継承するよう

Directory.CreateDirectory(dir, security); 
関連する問題