[C#] Auslesen der NTFS-Berechtigungen eines Verzeichnisses

WiZdooM

Erfahrenes Mitglied
Hallo,

ich programmiere gerade ein kleines Werkzeug, dass in einem rekursiven Aufruf alle Unterverzeichnisse eines gegebenen Verzeichnisses auflistet. So far no problem.

Nun soll ich damit aber für jedes Verzeichnis alle NTFS-Berechtigungen für die zugewiesenen Gruppen und Benutzer auslesen. Ich hab nur keine Peilung wie, oder zumindest nicht die richtige Peilung.

Es gibt eine DirectorySecurity Klasse die mit GetAccessControl ein Verzeichnis-Objekt ausliest. Aber ich weiß nicht wie ich jetzt von dort an den sAMAccountName bzw. Gruppennamen und die jeweiligen Berechtigungen komme.

Hat da jemand in der Richtung schonmal was gemacht und kann mir einen Tip geben?

Edit:
Ich habe eine Lösung gefunden. Mit Hilfe des DirectorySecurity Objekts lassen sich die Berechtigungen wie folgt für ein gegebenes Verzeichnis auslesen:

Code:
DirectorySecurity directorySecurity = Directory.GetAccessControl(currentDirectory);
foreach (FileSystemAccessRule fileSystemAccessRule in directorySecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
{
       string userName = fileSystemAccessRule.IdentityReference.Value;
       string userRights = fileSystemAccessRule.FileSystemRights.ToString();
       Console.Writeline(userName+": "+userRights);
}
 
Zuletzt bearbeitet:

rd4eva

Erfahrenes Mitglied
Du bist doch schon fast am Ziel:
C#:
DirectorySecurity ds = Directory.GetAccessControl(dir);
                AuthorizationRuleCollection arc = ds.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
                foreach (FileSystemAccessRule fsar in arc)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine("Identity : " + fsar.IdentityReference.Value);
                    sb.AppendLine("AccessControlType : " + fsar.AccessControlType);
                    sb.AppendLine("FileSystemRights : " + fsar.FileSystemRights);                                      
                    sb.AppendLine("Inherited : " + fsar.IsInherited);
                    sb.AppendLine("PropagationFlags : " + fsar.PropagationFlags);
                    sb.AppendLine("InheritanceFlags : " + fsar.InheritanceFlags);
                    
                    MessageBox.Show(sb.ToString());
                }

Die FileSystemAccessRule Objekte halten im Prinzip alle Informationne die du brauchst.
 
Zuletzt bearbeitet:

rd4eva

Erfahrenes Mitglied
Was vorallem bei deinem Schnippsel fehlt ist die AccessControlType Eigenschaft. Ohne die bringen dir die FileSystemRights nicht sonderlich viel, da AccessControlType die Werte allow und deny annehmen kann und somit erst tatsächlich bestimmt ob der Benutzer die jeweiligen FileSystemRights darf oder eben nicht darf.