我使用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可以修改或读取该文件夹,例如此函数。
如何获得群组和特殊权限?
任何示例代码,建议?
答案 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");
}