Ordnerberechtigungen, Ausgabe säubern

  • VB.NET

    Ordnerberechtigungen, Ausgabe säubern

    Hallo Zusammen,

    Ich habe kleine Schwierigkeiten mit dem Auslesen von Ordnerberechtigungen in Windows.

    Kurz:
    Ich gebe einen Pfad an zBsp: C:\Users, danach werden alle Unterordner ermittelt, bei jedem Unterordner werden die Berechtigungen ausgelesen.

    Das Problem:
    "Geerbte" und die "Explizite" Berechtigungen. Mir ist nur diese Methode bekannt:

    VB.NET-Quellcode

    1. DirSecurity.GetAccessRules(True, True, GetType(NTAccount))

    Da habe ich nur " entweder / oder, oder beides " zur Verfügung. Wenn ich alle will, werden einige Berechtigungen doppelt angezeigt. Nun wäre vermutlich Sinnvoll die Geerbten User Accounts zBsp. mit * kennzeichnen und die selben Expliziten löscht oder "merged".. aber wie kann ich eine Liste "mergen" ? oder gibt es elegantere Möglichkeiten?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Security.AccessControl
    3. Imports System.Security.Principal
    4. Public Class Form1
    5. Dim c As Integer = 0
    6. Private Sub FillTreeNode(ByVal dNode As TreeNode) 'dNode = Pfad zBsp: C:\Temp\
    7. Dim d As New DirectoryInfo(dNode.FullPath)
    8. For Each di As DirectoryInfo In d.GetDirectories
    9. Dim lstAcc As New List(Of String)
    10. On Error Resume Next
    11. Dim DirSecurity As DirectorySecurity = Directory.GetAccessControl(di.FullName)
    12. For Each ACL As FileSystemAccessRule In DirSecurity.GetAccessRules(True, True, GetType(NTAccount))
    13. Dim Str As String = ACL.IdentityReference.Value
    14. 'If ACL.IsInherited = True.. Wie weiter?
    15. lstAcc.Add(Str.Substring(" " & Str.LastIndexOf("\") + 1))
    16. Next
    17. Dim strAcc As String = String.Join(",", lstAcc)
    18. Dim nNode As New TreeNode(di.Name & strAcc)
    19. dNode.Nodes.Add(nNode)
    20. FillTreeNode(nNode)
    21. lstAcc.Clear()
    22. Next
    23. End Sub
    24. Public Sub ShowTree(ByVal Path As String)
    25. Dim nNode As New TreeNode(Path)
    26. frmTree.Nodes.Add(nNode)
    27. Me.FillTreeNode(nNode)
    28. End Sub
    29. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    30. Dim FolderBrowserDialog1 As New FolderBrowserDialog
    31. With FolderBrowserDialog1
    32. .Description = "Select the directory"
    33. If .ShowDialog = DialogResult.OK Then
    34. ShowTree(.SelectedPath)
    35. End If
    36. End With
    37. 'ShowTree("C:\Temp\")
    38. frmTree.ExpandAll()
    39. End Sub
    40. End Class



    Vielen Dank für Eure Antworten