Newsgroup: it.comp.lang.visual-basic
Titolo: NT Security con Active Directory

Salve,
c'è nessuno che sa come impostare i diritti di NT su una particolare
directory?
Ho provato con questo codice, passandogli come paramentri una directory
vuota tipo "C:\WINNT\PROV", come nome utente un nome di un gruppo presente
sulla macchina, tipo "GINEVRA\Gruppo1", e come terzo parametro "FULL
CONTROL", ma sembra non funzionare... la directory mantiene tutti i diritti
ereditati dalla directory padre, nessun errore è generato.
Il computer è standalone, e sono loggato come amministratore. Qualcuno sa
aprirmi la mente?
Grazie, Ciao
Private Sub SetDirectoryPrivileges(dirPath As String, UserName As String,
typeOfPerm As String)
Dim sec As New ADsSecurity
Dim sd As IADsSecurityDescriptor
Dim dacl As IADsAccessControlList
Dim ace As IADsAccessControlEntry
Dim newAce1 As New AccessControlEntry
    On Error GoTo HandlErr
    If InStr(UserName, "\") = 0 Then UserName = ComputerName + "\" +
UserName
    Set sd = sec.GetSecurityDescriptor("FILE://" & dirPath)
    Set dacl = sd.DiscretionaryAcl
    For Each ace In dacl
        If UCase(ace.Trustee) = UserName Then dacl.RemoveAce ace
    Next
    With newAce1
        .Trustee = UserName
        .AceType = ADS_ACETYPE_ACCESS_ALLOWED
        .Flags = 0
        .AceFlags = ADS_ACEFLAG_INHERIT_ACE + 1
        Select Case UCase(typeOfPerm)
        Case "FULL CONTROL": .AccessMask = ADS_RIGHT_SYNCHRONIZE + _
                            ADS_RIGHT_WRITE_OWNER + _
                            ADS_RIGHT_WRITE_DAC + _
                            ADS_RIGHT_READ_CONTROL + _
                            ADS_RIGHT_DELETE + _
                            ADS_RIGHT_DS_CONTROL_ACCESS + _
                            ADS_RIGHT_DS_LIST_OBJECT + _
                            ADS_RIGHT_DS_DELETE_TREE + _
                            ADS_RIGHT_DS_WRITE_PROP + _
                            ADS_RIGHT_DS_READ_PROP + _
                            ADS_RIGHT_DS_SELF + _
                            ADS_RIGHT_ACTRL_DS_LIST + _
                            ADS_RIGHT_DS_DELETE_CHILD + _
                            ADS_RIGHT_DS_CREATE_CHILD
        Case "READ": .AccessMask = ADS_RIGHT_GENERIC_READ
        Case "CHANGE": .AccessMask = ADS_RIGHT_SYNCHRONIZE + _
                            ADS_RIGHT_DELETE + _
                            ADS_RIGHT_READ_CONTROL + _
                            ADS_RIGHT_DS_CONTROL_ACCESS + _
                            ADS_RIGHT_DS_LIST_OBJECT + _
                            ADS_RIGHT_DS_WRITE_PROP + _
                            ADS_RIGHT_DS_READ_PROP + _
                            ADS_RIGHT_DS_SELF + _
                            ADS_RIGHT_ACTRL_DS_LIST + _
                            ADS_RIGHT_DS_DELETE_CHILD + _
                            ADS_RIGHT_DS_CREATE_CHILD
        End Select
    End With
    dacl.AddAce newAce1
    sd.DiscretionaryAcl = dacl
    sec.SetSecurityDescriptor sd2
    Exit Sub
HandlErr:
    Err.Raise 1020 + vbObjectError, , "Impossibile assegnare privilegi alla
directory " & dirPath
End Sub

 ereditati dalla directory padre, nessun errore è generato.
Guarda, il codice da usare lo ignoro, ma stando al funzionamento dei
permessi dovresti disabilitare prima (in qualche modo) l'eredità dalla
directory padre... altrimenti non puoi modificare nulla nemmeno se apri la
finestra della protezione a mano.
Massimo