以编程方式获取Windows 2003中文件夹的groups-users-permissions特殊权限列表

时间:2010-10-11 11:22:55

标签: c# security permissions ntfs

我使用Window 2003服务器,我需要以编程方式使用C#获取有关安全性文件夹的信息。

我想创建一个检查权限的工具。我需要获取文件夹的组,用户,权限和特殊权限,

  

C:\ Documents and Settings \ All   用户\应用   数据\微软\加密\ RSA \ MachineKeys的

编辑:

以下是GetSecurityDescriptorSddlForm方法的示例代码。

public static string GetObjectPermission(string fullFolderName)
{
    FileSecurity fileSecure = File.GetAccessControl(fullFolderName);
    StringBuilder acer = new StringBuilder();
    fileSecure.GetSecurityDescriptorSddlForm(AccessControlSections.All);

    foreach (FileSystemAccessRule ace in fileSecure.GetAccessRules(true, true, typeof(NTAccount)))
    {
        acer.Append(ace.FileSystemRights + ":" + ' ' + ace.IdentityReference.Value + "\n");
    }
    return acer.ToString();
}

此示例代码将显示哪些NTAccount可以修改或读取该文件夹,例如此函数。

如何获得群组和特殊权限?

任何示例代码,建议?

2 个答案:

答案 0 :(得分:2)

你能使用DirectoryInfo来获取ACL吗?所有ACL都应该在那里(用户,组):

        // Create a new DirectoryInfo object.
        DirectoryInfo dInfo = new DirectoryInfo(FileName);

        // Get a DirectorySecurity object that represents the  
        // current security settings.
        DirectorySecurity dSecurity = dInfo.GetAccessControl();

完整文档: http://msdn.microsoft.com/en-us/library/c1f66bc2(v=vs.110).aspx

答案 1 :(得分:0)

如果你想在文件夹中获取ACL中的所有ace列表,你应该使用这个方法,同样使用这种方法你可以访问其他ace属性,比如   ace.AccessControlType ace.IsInherited ;

 public static void CheckAceInformation(string FileName,string LoginName)
        {
            string FileSystemRightsValue = "";

            FileSecurity security = File.GetAccessControl(FileName);

            AuthorizationRuleCollection acl = security.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));

            foreach(FileSystemAccessRule ace in acl)
            {
                if(ace.IdentityReference.Value == LoginName)
                {
                    FileSystemRightsValue = ace.FileSystemRights.ToString();

                    Console.WriteLine(LoginName +  "  your permission value is" + FileSystemRightsValue)

                    return;
                }
            }
            Console.WriteLine(LoginName + "your not permission in this folder");

        }