Descriptores de seguridad en archivos y claves del Registro

Las interfaces de servicio de Active Directory (ADSI) se pueden usar para administrar y proteger sistemas de archivos dentro de una organización, incluida la capacidad de establecer o modificar ACL en archivos o recursos compartidos de archivos creados por los usuarios. Interfaces de seguridad, como IADsSecurityDescriptor, IADsAccessControlList e IADsAccessControlEntry establecen ACL en Active Directory, Exchange, archivo, recurso compartido de archivos o objetos de clave del Registro. Antes de usar estas interfaces, es posible que sea necesario modificar el descriptor de seguridad si usa un formato diferente de la interfaz, o si no tiene derechos de acceso a la SACL del descriptor de seguridad porque no es miembro del grupo de administradores de seguridad.

Para obtener, establecer o modificar el descriptor de seguridad, use la interfaz IADsSecurityUtility . Esta interfaz permite recuperar un descriptor de seguridad de varios recursos en su formato original, como el formato ADSI IADsSecurityDescriptor, un descriptor de seguridad sin procesar o como una cadena hexadecimal como se usa en Exchange 5.5. Cuando se recupera, puede convertirlo a otro formato, por ejemplo, desde un descriptor de seguridad sin procesar a IADsSecurityDescriptor. A continuación, puede volver a escribir el nuevo formato en el recurso.

Algunos de los valores de propiedad IADsAccessControlEntry , como AccessMask y AceFlags, serán diferentes para los distintos tipos de objeto. Por ejemplo, un objeto de Active Directory usará el miembro ADS_RIGHT_GENERIC_READ de la enumeración ADS_RIGHTS_ENUM para la propiedad IADsAccessControlEntry.AccessMask , pero el derecho de acceso equivalente para un objeto de archivo es FILE_GENERIC_READ. No es seguro suponer que todos los valores de propiedad serán los mismos para los objetos de Active Directory y los objetos que no son de Active Directory. En la lista siguiente se muestran las propiedades IADsAccessControlEntry que difieren para los objetos que no son de Active Directory y dónde se pueden obtener los valores adecuados.

AccessMask

Para obtener más información y una lista de los valores posibles para los objetos de archivos o recursos compartidos de archivos, vea Seguridad de archivos y derechos de acceso.

Para obtener más información y una lista de los valores posibles para los objetos del Registro, vea Derechos de acceso y seguridad de clave del Registro.

AceType

Para obtener más información, vea el miembro AceType de la estructura ACE_HEADER .

AceFlags

Para obtener más información, vea el miembro AceFlags de la estructura ACE_HEADER .

Banderas

Contiene cero o una combinación de uno o varios de los valores siguientes de WinNT.h.

ACE_OBJECT_TYPE_PRESENT (1)

ObjectType contiene un valor válido.

ACE_INHERITED_OBJECT_TYPE_PRESENT (2)

InheritedObjectType contiene un valor válido.

Objecttype

Para obtener más información, vea el miembro ObjectType de las estructuras ACCESS_DENIED_OBJECT_ACE, ACCESS_ALLOWED_OBJECT_ACE y similares. Esta propiedad no debe establecerse ni modificarse para objetos que no son de Active Directory.

InheritedObjectType

Para obtener más información, vea el miembro InheritedObjectType de las estructuras ACCESS_DENIED_OBJECT_ACE, ACCESS_ALLOWED_OBJECT_ACE y similares. Esta propiedad no debe establecerse ni modificarse para objetos que no son de Active Directory.

Normalmente, IADsSecurityUtility.GetSecurityDescriptor recuperará todas las partes del descriptor de seguridad, como propietario, grupo, SACL o DACL. Del mismo modo, IADsSecurityUtility.SetSecurityDescriptor sobrescribirá todas las partes del descriptor de seguridad de forma predeterminada. Puede usar la propiedad IADsSecurityUtility.SecurityMask para especificar partes individuales del descriptor de seguridad que se van a recuperar o establecer. Por ejemplo, puede establecer SecurityMask en ADS_SECURITY_INFO_DACL antes de llamar a GetSecurityDescriptor para recuperar solo la DACL sin recuperar las demás partes del descriptor de seguridad.

Para obtener más información y un ejemplo de código que usa la interfaz IADsSecurityUtility para agregar una ACE a un archivo, vea Código de ejemplo para agregar una ACE a un archivo.

En el código de ejemplo siguiente se proporcionan los identificadores constantes de los objetos file, file share y Registry para las propiedades AccessMask, AceType, AceFlags y Flags para su uso con Visual Basic y 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