C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: フォルダアクセス権限の取得結果の読み方


(過去ログ 136 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■80262 / inTopicNo.1)  フォルダアクセス権限の取得結果の読み方
  
□投稿者/ おぢぢ (1回)-(2016/06/24(Fri) 19:30:01)

分類:[Windows 全般] 

フォルダのアクセス権限情報を調べるため、

string path = "D:\\Temp";
DirectorySecurity security = System.IO.Directory.GetAccessControl(path, AccessControlSections.All);
foreach (FileSystemAccessRule rule in security.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
{
	Console.WriteLine(String.Join(" | ", new string[] {	 rule.AccessControlType.ToString(), 
								(rule.IdentityReference as NTAccount).Value, 
								(rule.FileSystemRights).ToString(), 
								 rule.IsInherited      .ToString(), 
								 rule.InheritanceFlags .ToString(), 
								 rule.PropagationFlags .ToString() }));
}

でアクセス権限を取得すると、
以下のように 1 つのアカウントorグループに対して結果が 2 件返ることがあります。

 Allow | BUILTIN\Users | ReadAndExecute, Synchronize | True | None                            | None
 Allow | BUILTIN\Users | -1610612736                 | True | ContainerInherit, ObjectInherit | InheritOnly

後者は親フォルダからの継承値のようですが、
 (rule.IdentityReference as NTAccount).Value に System.Security.AccessControl.FileSystemRights で表現できない値が入っています。
この値はどのように解釈すれば良いでしょうか?

引用返信 編集キー/
■80265 / inTopicNo.2)  Re[1]: フォルダアクセス権限の取得結果の読み方
□投稿者/ Azulean (658回)-(2016/06/24(Fri) 23:26:46)
No80262 (おぢぢ さん) に返信
> (rule.IdentityReference as NTAccount).Value に System.Security.AccessControl.FileSystemRights で表現できない値が入っています。

(rule.FileSystemRights).ToString() の誤りですね。


> この値はどのように解釈すれば良いでしょうか?

-1610612736 を 32bit の範囲で 16 進数に変換すると 0xA0000000。
2 進数で見れば、31 ビット目および 29 ビット目が設定されていることになります。

ACCESS_MASK のページによると、GENERIC_READ および GENERIC_EXECUTE らしいですが、.NET の FileSystemRights ではそのビットに対応する定義はないので数値で表示されています。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa374892
引用返信 編集キー/
■80268 / inTopicNo.3)  Re[2]: フォルダアクセス権限の取得結果の読み方
□投稿者/ おぢぢ (3回)-(2016/06/25(Sat) 03:26:08)
> (rule.FileSystemRights).ToString() の誤りですね。
失礼しました。その通りです

> -1610612736 を 32bit の範囲で 16 進数に変換すると 0xA0000000。
> 2 進数で見れば、31 ビット目および 29 ビット目が設定されていることになります。
>
> ACCESS_MASK のページによると、GENERIC_READ および GENERIC_EXECUTE らしいですが、.NET の FileSystemRights ではそのビットに対応する定義はないので数値で表示されています。
> https://msdn.microsoft.com/en-us/library/windows/desktop/aa374892
なるほど!理解しました
実際に入っているのが ACCESS_MASK なのですね…ややこしい
自前で bit を読み解いて判別することにします
ありがとうございました
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -