DirectorySecurity Inheritance für alle Objekte

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    DirectorySecurity Inheritance für alle Objekte

    Hallo,

    ich habe ein Problem mit der NTFS Vererbung eines Ordners. Ich kann die Vererbung durch "DirectorySecurity - Inheritance" aktivieren und deaktivieren. Das Funktioniert auch super!
    Nun möchte ich aber virtuell den Hacken setzten lassen, dass die Vererbung nach unten für alle Objekte geändert wird, sobald ich die Vererbung aktiviere. Hier mein Code:

    VB.NET-Quellcode

    1. Public Function Vererbung2(Pfad As String, Aktivieren As Boolean)
    2. Dim Dinfo As New DirectoryInfo(Pfad)
    3. Dim DSecurity As DirectorySecurity = Dinfo.GetAccessControl
    4. Try
    5. If Aktivieren = True Then
    6. DSecurity.SetAccessRuleProtection(False, False)
    7. Else
    8. DSecurity.SetAccessRuleProtection(True, True)
    9. End If
    10. Application.DoEvents()
    11. Dinfo.SetAccessControl(DSecurity)
    12. Application.DoEvents()
    13. Return True
    14. Catch ex As Exception
    15. Return False
    16. End Try
    17. End Function


    Kann mir jemand sagen wie ich die Vererbung beim aktivieren nach unten ersetzen lassen kann?

    Vielen Dank vorab für die Hilfe :)
    Willkommen im Forum. :thumbup:
    Definiere

    Nawiat schrieb:

    Vererbung nach unten
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo :)

    Wenn man in "Eigenschaften" - "Sicherheit" - "Erweitert" geht, hat man unter dem Button "Vererbung aktivieren" den Hacken:

    "Alle Berechtigungen für untergeordnete Objekte durch vererbbare Berechtigungseinträge von diesem Objekt ersetzen"

    Diesen möchte ich quasi "virtuell" mitgeben :)

    Vielen Dank.
    @Nawiat Was verstehst Du unter quasi "virtuell"?
    Da musst Du Dich rekursiv durch die Verzeichnis-Struktur durchhangeln und Deine Attribute anwenden.
    Application.DoEvents() wollen wir nicht verwenden, das ist hier auch nicht erforderlich.
    Wenn Du statt Pfad As String gleich Dinfo As DirectoryInfo als Argument übergibst (die solltest Du eigentlich vorrätig haben) und wenn Du den If-Konstrukt ordentlich ausformulierst, kommt dies heraus:

    VB.NET-Quellcode

    1. Public Function Vererbung2(Dinfo As DirectoryInfo, Aktivieren As Boolean)
    2. Dim DSecurity As DirectorySecurity = Dinfo.GetAccessControl
    3. Try
    4. DSecurity.SetAccessRuleProtection(Not Aktivieren, Not Aktivieren)
    5. Dinfo.SetAccessControl(DSecurity)
    6. Return True
    7. Catch ex As Exception
    8. Return False
    9. End Try
    10. End Function
    Zum Durch-Iterieren durch Verzeichnisse fragst Du Frau Google nach vb.net durch verzeichnisse iterieren
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für deine Antwort und Hilfe :)

    Es kann doch aber nicht die Lösung sein durch iterieren eines Verzeichnisses die Vererbung manuell zu ändern. Die Option "Vererbung nach unten ersetzen" existiert ja bereits. Also muss ich wirklich jede Datei und jeden Ordner anfassen und die Sicherheitseinstellungen ändern?

    Trotzdem vielen Dank :)

    MfG Peter
    @Nawiat Dann sollte dies hier Dein Problem lösen:
    csharp.hotexamples.com/de/exam…urity-class-examples.html
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!