Récupérer tous les droits ntfs d'une ressource

Soyez le premier à donner votre avis sur cette source.

Vue 19 347 fois - Téléchargée 1 094 fois

Description

Salut à tous !
Ca fait déjà quelques années que je surf ici et j'ai jamais posté de sources, commentaires... Simplement, parceque ce que je voulait poster existait déjà, et bien souvent en mieux ! Mais voila, pendant 3 mois j'ai galéré à récupérer TOUT les droits (écriture, modification, lecture...) d'une ressource. J'ai trouvé grâce à ce lien: http://www.codeproject.com/dotnet/ntsecuritynet.asp#xx437173xx

Dedans est expliqué rapidement que VB.net la sécurité, c'est pas top et que des internautes on créés une DLL permettant de faciliter le boulot des admins :D

Voici en zip la dll !

Mon code (ci-dessous) permet de récupérer la liste des personnes ayant les droits en écriture et lecture sur un dossier X.
On donne le path de la ressource à la fonction (ByVal path As String) et elle récupère les users un par un (les infos des users sont contenu dans un "ACE" (AccessEntry) qui fait partit d'une DACL (DiscretionaryAccessControlList). Une DACL contient plusieurs ACE).

Voila, j'espère vous faire gagner un temps précieux :)

Source / Exemple :


'En haut du code:
'Imports System.IO,System.Windows
'Imports Microsoft.Win32.Security 'Projet/Ajouter une référence/"Parcourir"/ Ajouter "mmsseclib.dll"

Function ScanRessource(ByVal path As String)

        'Vérification:    
        Dim oFS As New DirectoryInfo(path) 'Dossier à scanné (= dossier parent)
        Dim oDir As DirectoryInfo           'Sous dossier de oFS
        Dim Lecture, Modif, myPath, myUserName As String 'variables temp...

 For Each oDir In oFS.GetDirectories()
        'Récupération des droits d'accès:
        myPath = Replace(oDir.FullName, "\", "\\")
        Dim sec As New SecuredObject(myPath, SecuredObjectType.FileObject)
        Dim ace As AccessEntry
        Lecture = ""
        Modif = ""

        'Je récupère un OBJET "sec" sur le dossier X.
        'Cette objet (le DACL) contient un tableau d'ACE (qui sont eux-même des tableaux).
        'Pour chaque ACE du tableau DACL, 
        'je récupère le nom contenu dans le ACE -> ace.fullname
        'Puis les droits -> ace.rights
        For Each ace In sec.Permissions
            'Je veux pas récupérer les droits Administrateurs:
            If ace.Trustee.FullName.ToString <> "WORKGROUP\Admins du domaine" And ace.Trustee.FullName.ToString <> "" Then

                'Par défaut, je bouge le nom de domaine.
                'Ex: WORKGROUP\Niko
                myUserName = ace.Trustee.FullName.Replace("WORKGROUP\", "")

                'Droits lecture ou écriture ?
                Select Case ace.Rights

                    Case AccessRights.FileExecute, AccessRights.FileRead, AccessRights.FileReadExecute
                        If Lecture.IndexOf(myUserName) = -1 Then '(pas de doublons de nom dans ma variable)
                            Lecture &= myUserName & ";" '-> X;X;X;X...
                        End If

                        'Ecriture
                    Case AccessRights.FileModify
                        If Lecture.IndexOf(myUserName) = -1 And Modif.IndexOf(myUserName) = -1 Then
                            Modif &= myUserName & ";" '-> X;X;X;X...
                        End If
                End Select

            End If 'FIN DE: "If ace.Trustee.FullName.ToString <> "WORKGROUP\A..."

        Next ace 'Users suivant... 
    Next oDir
    End Function

Conclusion :


Bon, si chuis pas claire, merci de le faire savoir... La sécurité microsoft reste tout de même assez difficile à assimiler. Une fois cela fait, c'est un jeu d'enfant :)

Partagez vos connaissances !

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Fend
Messages postés
1
Date d'inscription
mardi 29 mai 2007
Statut
Membre
Dernière intervention
29 mai 2007
-
Bonjour,
Merci pour ton explication !

il me reste encore quelques questions mais je vais faire mes tests. Néanmoins : pourquoi remplacer "" par "\" ?

Merci.
nquere
Messages postés
17
Date d'inscription
mercredi 10 mars 2004
Statut
Membre
Dernière intervention
21 mars 2006
-
Effectivement, sur un dossier partager, ce sont les droits partagés qui sont executer en premier puis les droits NTFS. Mais les droits NTFS priment sur le dossier partagés.

Pour être franc, je ne me suis jamais penché sur ce problème... Mais je pense que cela doit être faisable grâce à la DLL.
C'est une DLL connue maintenant, essaies de retrouver le site de ceux qui l'ont créés, il doit y avoir des tutos ou des exemples dessus ! (désolé pour si peu d'aide mais ce projet date de plus de 2 ans ! )

Bon courage ;)
visual3d
Messages postés
1
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
1 septembre 2006
-
Salut nquere !

Pour ma part j'ais capter ! :)

En revanche quand on exécute la commande sur un dossier enfant d'un dossier partager sur un domaine, c'est les options de partages appliqué au dossier parent qui prennent le dessus.
D'ou ma question comment récupérer les propriétés du partage et non pas de la sécurité du répertoire...
cs_anonym3
Messages postés
8
Date d'inscription
dimanche 4 décembre 2005
Statut
Membre
Dernière intervention
3 mai 2007
-
vraiment pas utile sans exemple, c'est incompréhensible...
SIOGA
Messages postés
2
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
11 janvier 2005
-
Si j'ai bien compris, ça ne marche qu'avec VB.NET.
Si on utilise VB6, comment fait-on ?
J'ai récupéré la dll mmsseclib.
Je l'ai copiée dans ..\system32\.
J'ai exécuté regsvr32 mmsseclib.dll.
J'ai une erreur :
"mmsseclib.dll a été chargé mais le point d'entrée DllRegisterServer est introuvable.
Ce fichier ne peut être enregistré."

Qui pourra m'aider. Si c'est possible ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.