4

フォルダーのセキュリティ情報を取得するための簡単なコードを作成しました。情報には、ユーザーとグループ、およびフォルダーに対する権限が含まれています

public void GetSecurityRules(DirectoryInfo directoryInfo)
    {
        DirectorySecurity DSecurity = directoryInfo.GetAccessControl();
        AuthorizationRuleCollection Rules = DSecurity.GetAccessRules(true, true, typeof(NTAccount));


        foreach (FileSystemAccessRule fileSystemAccessRule in Rules)
        {
            Console.WriteLine("User/Group name {0}",fileSystemAccessRule.IdentityReference.Value);
            Console.WriteLine("Permissions: {0}", fileSystemAccessRule.FileSystemRights.ToString());
        }
    }

この行fileSystemAccessRule.IdentityReference.Valueでは、ユーザーとグループの両方を取得しましたが、値がユーザーまたはグループを表しているかどうかをどのように知ることができますか?

4

1 に答える 1

1

私の知る限り、CLR はこの情報を公開しません。手動でp/invokeLsaLookupSidsし、返される SID_NAME_USE 値を調べる必要があります。CLR は、SID をアカウント名に変換するためにこの関数も呼び出しますが、SID_NAME_USE 値を破棄します。コードについては、Reflector を分割し、mscorlib を開き、内部TranslateToNTAccounts関数がどのように機能するかを確認してくださいSystem.Security.Principal.SecurityIdentifier

別の方法として、このようなルックアップを繰り返し実行しない場合は、WMI を使用する方が簡単な場合がありますWin32_Account。つまり、SID でクエリを実行し、SIDType メンバーを調べます。

于 2013-02-04T13:37:23.243 に答える