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:
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
Vielen Dank für Eure Antworten
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:
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?
VB.NET-Quellcode
- Imports System.IO
- Imports System.Security.AccessControl
- Imports System.Security.Principal
- Public Class Form1
- Dim c As Integer = 0
- Private Sub FillTreeNode(ByVal dNode As TreeNode) 'dNode = Pfad zBsp: C:\Temp\
- Dim d As New DirectoryInfo(dNode.FullPath)
- For Each di As DirectoryInfo In d.GetDirectories
- Dim lstAcc As New List(Of String)
- On Error Resume Next
- Dim DirSecurity As DirectorySecurity = Directory.GetAccessControl(di.FullName)
- For Each ACL As FileSystemAccessRule In DirSecurity.GetAccessRules(True, True, GetType(NTAccount))
- Dim Str As String = ACL.IdentityReference.Value
- 'If ACL.IsInherited = True.. Wie weiter?
- lstAcc.Add(Str.Substring(" " & Str.LastIndexOf("\") + 1))
- Next
- Dim strAcc As String = String.Join(",", lstAcc)
- Dim nNode As New TreeNode(di.Name & strAcc)
- dNode.Nodes.Add(nNode)
- FillTreeNode(nNode)
- lstAcc.Clear()
- Next
- End Sub
- Public Sub ShowTree(ByVal Path As String)
- Dim nNode As New TreeNode(Path)
- frmTree.Nodes.Add(nNode)
- Me.FillTreeNode(nNode)
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim FolderBrowserDialog1 As New FolderBrowserDialog
- With FolderBrowserDialog1
- .Description = "Select the directory"
- If .ShowDialog = DialogResult.OK Then
- ShowTree(.SelectedPath)
- End If
- End With
- 'ShowTree("C:\Temp\")
- frmTree.ExpandAll()
- End Sub
- End Class
Vielen Dank für Eure Antworten