Share via


Descripteurs de sécurité sur les fichiers et les clés de Registre

Les interfaces de service Active Directory (ADSI) peuvent être utilisées pour gérer et sécuriser les systèmes de fichiers au sein d’un organization, notamment la possibilité de définir ou de modifier des listes de contrôle d’accès sur des fichiers ou des partages de fichiers créés par les utilisateurs. Les interfaces de sécurité, telles que IADsSecurityDescriptor, IADsAccessControlList et IADsAccessControlEntry définissent des listes de contrôle d’accès sur les objets Active Directory, Exchange, file, file, file share ou registry key. Avant d’utiliser ces interfaces, il peut être nécessaire de modifier le descripteur de sécurité s’il utilise un format différent de l’interface ou si vous ne disposez pas de droits d’accès à la SACL du descripteur de sécurité, car vous n’êtes pas membre du groupe d’administrateurs de sécurité.

Pour obtenir, définir ou modifier le descripteur de sécurité, utilisez l’interface IADsSecurityUtility . Cette interface vous permet de récupérer un descripteur de sécurité à partir de différentes ressources dans son format d’origine, comme le format ADSI IADsSecurityDescriptor, un descripteur de sécurité brut ou une chaîne hexadécimale utilisée dans Exchange 5.5. Une fois récupéré, vous pouvez le convertir dans un autre format, par exemple, à partir d’un descripteur de sécurité brut en IADsSecurityDescriptor. Vous pouvez ensuite réécrire le nouveau format dans la ressource.

Certaines des valeurs de propriété IADsAccessControlEntry , telles que AccessMask et AceFlags, seront différentes pour différents types d’objets. Par exemple, un objet Active Directory utilise le membre ADS_RIGHT_GENERIC_READ de l’énumération ADS_RIGHTS_ENUM pour la propriété IADsAccessControlEntry.AccessMask , mais le droit d’accès équivalent pour un objet de fichier est FILE_GENERIC_READ. Il n’est pas sûr de supposer que toutes les valeurs de propriété seront les mêmes pour les objets Active Directory et les objets non Active Directory. La liste suivante montre les propriétés IADsAccessControlEntry qui diffèrent pour les objets non Active Directory et où les valeurs appropriées peuvent être obtenues.

AccessMask

Pour plus d’informations et pour obtenir la liste des valeurs possibles pour les objets de partage de fichiers ou de fichiers, consultez Sécurité des fichiers et droits d’accès.

Pour plus d’informations et une liste des valeurs possibles pour les objets du Registre, consultez Sécurité de la clé de registre et droits d’accès.

AceType

Pour plus d’informations, consultez le membre AceType de la structure ACE_HEADER .

AceFlags

Pour plus d’informations, consultez le membre AceFlags de la structure ACE_HEADER .

Drapeaux

Contient zéro ou une combinaison d’une ou plusieurs des valeurs suivantes de WinNT.h.

ACE_OBJECT_TYPE_PRESENT (1)

ObjectType contient une valeur valide.

ACE_INHERITED_OBJECT_TYPE_PRESENT (2)

InheritedObjectType contient une valeur valide.

Objecttype

Pour plus d’informations, consultez le membre ObjectType des structures ACCESS_DENIED_OBJECT_ACE, ACCESS_ALLOWED_OBJECT_ACE et similaires. Cette propriété ne doit pas être définie ou modifiée pour les objets non Active Directory.

InheritedObjectType

Pour plus d’informations, consultez le membre InheritedObjectType des structures ACCESS_DENIED_OBJECT_ACE, ACCESS_ALLOWED_OBJECT_ACE et similaires. Cette propriété ne doit pas être définie ou modifiée pour les objets non Active Directory.

Normalement, IADsSecurityUtility.GetSecurityDescriptor récupère toutes les parties du descripteur de sécurité, telles que owner, group, SACL ou DACL. De même, IADsSecurityUtility.SetSecurityDescriptor remplace toutes les parties du descripteur de sécurité par défaut. Vous pouvez utiliser la propriété IADsSecurityUtility.SecurityMask pour spécifier des parties individuelles du descripteur de sécurité à récupérer ou à définir. Par exemple, vous pouvez définir SecurityMask sur ADS_SECURITY_INFO_DACL avant d’appeler GetSecurityDescriptor pour récupérer uniquement la liste dacl sans récupérer les autres parties du descripteur de sécurité.

Pour plus d’informations et un exemple de code qui utilise l’interface IADsSecurityUtility pour ajouter un ACE à un fichier, consultez Exemple de code pour l’ajout d’un ACE à un fichier.

L’exemple de code suivant fournit les identificateurs constants pour les objets de fichier, de partage de fichiers et de Registre pour les propriétés AccessMask, AceType, AceFlags et Flags à utiliser avec Visual Basic et Microsoft Visual Basic Scripting Edition.

' Identifiers for the IADsAccessControlEntry.AccessMask property for file,
' file share, and registry objects.
Const DELETE = &H10000
Const READ_CONTROL = &H20000
Const WRITE_DAC = &H40000
Const WRITE_OWNER = &H80000
Const SYNCHRONIZE = &H100000

Const STANDARD_RIGHTS_REQUIRED = &HF0000

Const STANDARD_RIGHTS_READ = &H20000
Const STANDARD_RIGHTS_WRITE = &H20000
Const STANDARD_RIGHTS_EXECUTE = &H20000

Const STANDARD_RIGHTS_ALL = &H1F0000

Const SPECIFIC_RIGHTS_ALL = &HFFFF

' Identifiers for the IADsAccessControlEntry.AccessMask property for file and
' file share objects.
Const FILE_READ_DATA = &H1                  '  file & pipe
Const FILE_LIST_DIRECTORY = &H1             '  directory

Const FILE_WRITE_DATA = &H2                 '  file & pipe
Const FILE_ADD_FILE = &H2                   '  directory

Const FILE_APPEND_DATA = &H4                '  file
Const FILE_ADD_SUBDIRECTORY = &H4           '  directory
Const FILE_CREATE_PIPE_INSTANCE = &H4       '  named pipe

Const FILE_READ_EA = &H8                    '  file & directory

Const FILE_WRITE_EA = &H10                  '  file & directory

Const FILE_EXECUTE = &H20                   '  file
Const FILE_TRAVERSE = &H20                  '  directory

Const FILE_DELETE_CHILD = &H40              '  directory

Const FILE_READ_ATTRIBUTES = &H80           '  all

Const FILE_WRITE_ATTRIBUTES = &H100         '  all

Const FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &H1FF

Const FILE_GENERIC_READ = STANDARD_RIGHTS_READ Or FILE_READ_DATA Or FILE_READ_ATTRIBUTES Or _
                          FILE_READ_EA Or SYNCHRONIZE

Const FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE Or FILE_WRITE_DATA Or FILE_WRITE_ATTRIBUTES Or _
                           FILE_WRITE_EA Or FILE_APPEND_DATA Or SYNCHRONIZE

Const FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE Or FILE_READ_ATTRIBUTES Or FILE_EXECUTE Or SYNCHRONIZE


' Identifiers for the IADsAccessControlEntry.AccessMask property for registry
' objects.
Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_CREATE_LINK = &H20
Const KEY_WOW64_32KEY = &H200
Const KEY_WOW64_64KEY = &H100
Const KEY_WOW64_RES = &H300

Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And _
                  (Not SYNCHRONIZE))

Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))

Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))

Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or _
                         KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
    

' Identifiers for the IADsAccessControlEntry.AceFlags property for file and
' file share objects.
Const OBJECT_INHERIT_ACE = &H1
Const CONTAINER_INHERIT_ACE = &H2
Const NO_PROPAGATE_INHERIT_ACE = &H4
Const INHERIT_ONLY_ACE = &H8
Const INHERITED_ACE = &H10
    

' Identifiers for the IADsAccessControlEntry.Flags property.
Const ACE_OBJECT_TYPE_PRESENT = 1
Const ACE_INHERITED_OBJECT_TYPE_PRESENT = 2