2011-08-18 11 views
0

ファイルシステムとアクセス権/アクセス権(アクセス制御リスト、ACLともいう)はかなり新しいです。 ACLに関するコーディング中に、私はファイルに必要なプロパティを設定できません。私はFileSystemRightsメンバーの私の理解が間違っているかどうか、あるいは私が間違ったことをしているかどうかは分かりません。 (そして私はすでにこの部分にかなりの時間を費やしています)FileSystemRightsの問題(C#)

私がしたいのは、ファイルの権利を変更して読みやすく、編集できず、名前を変更し、削除することができないようにすることです他の場所にコピーされます。 MSDNの例を使用して

は、ここで私がこれまで持っているものです。

  1. は(.Modifyファイルが読めなくなってしまいます拒否)変更権を拒否追加:

    try 
    { 
        //Get current identity 
        WindowsIdentity self = System.Security.Principal.WindowsIdentity.GetCurrent(); 
    
        // Add the access control entry to the file. 
        AddFileSecurity(filename, self.Name, FileSystemRights.Modify, AccessControlType.Deny); 
        AddFileSecurity(filename, self.Name, FileSystemRights.Write, AccessControlType.Deny); 
        AddFileSecurity(filename, self.Name, FileSystemRights.ReadAndExecute, AccessControlType.Allow); 
    
        // Remove the access control entry from the file. 
        RemoveFileSecurity(filename, self.Name, FileSystemRights.ReadAndExecute, AccessControlType.Deny); 
        RemoveFileSecurity(filename, self.Name, FileSystemRights.Read, AccessControlType.Deny); 
    
        Console.WriteLine("Done."); 
    } 
    catch (Exception e) 
    { 
        Console.WriteLine(e); 
    } 
    

    私のロジックは、ということです

  2. がReadAndExecute権
  3. 削除がエントリを拒否できるように追加書き込み権を拒否追加
  4. 削除(.ModifyがReadAndExecuteを拒否したとして)ReadAndExecuteに(.Modifyは読み取りを拒否したよう)

は私が正しく、この部分をやって読むのエントリを拒否?そうでない場合は、ファイルを読み取りのみ可能にし、編集可能ではなく、名前変更可能で、削除可能でコピー可能にするために、どうすればよいかを教えてください。事前に多くの感謝!

+2

ファイルが読み込み可能であれば、それは常にコピー可能です! – Yahia

+0

他の場所にコピーされないようにすることは可能です(回避策はありますか?) –

+0

いいえ - 読み取り可能なものはすべてコピー可能です... – Yahia

答えて

0

何が間違っているのか説明してください。私が見ることができる唯一の問題は、自分自身の権限を設定しているが、他のユーザーやグループは権限を設定していないことです。おそらく、すべてのグループ(管理者、ユーザーなど)を反復して、すべてを無効にする必要があります。ただし、&を実行してください。私はSYSTEMが常にすべてのファイルを完全に制御できると思うが。

+0

申し訳ありませんが、このアプリケーションの使用について言及していません。これは、異なるユーザーに配布されるサムドライブに存在するはずです。それは "self.Name"が自分のコンピュータdomain \ userを取得するためのものです。サムドライブにはファイルがあり、読み込みのみ可能なはずですので、コピー、編集、削除の機能を禁止する必要があります。サムドライブでは何も変更せず、ファイルを読み込むだけです。 –