Descritores de segurança em arquivos e chaves do Registro

As Interfaces de Serviço do Active Directory (ADSI) podem ser usadas para gerenciar e proteger sistemas de arquivos dentro de uma organização, incluindo a capacidade de definir ou modificar ACLs em arquivos ou compartilhamentos de arquivos criados por usuários. As interfaces de segurança, como IADsSecurityDescriptor, IADsAccessControlList e IADsAccessControlEntry definem ACLs em objetos de chave do Active Directory, Exchange, arquivo, compartilhamento de arquivos ou do Registro. Antes de usar essas interfaces, o descritor de segurança pode precisar ser modificado se ele usa um formato diferente da interface ou se você não tiver direitos de acesso à SACL do descritor de segurança porque você não é membro do grupo de administradores de segurança.

Para obter, definir ou modificar o descritor de segurança, use a interface IADsSecurityUtility. Essa interface permite que você recupere um descritor de segurança de vários recursos em seu formato original, como o formato ADSI IADsSecurityDescriptor, um descritor de segurança bruto ou como uma cadeia de caracteres hexadecimal como usado no Exchange 5.5. Quando recuperado, você pode convertê-lo em outro formato, por exemplo, de um descritor de segurança bruto para IADsSecurityDescriptor. Em seguida, você pode gravar o novo formato de volta no recurso.

Alguns dos valores da propriedade IADsAccessControlEntry, como AccessMask e AceFlags, serão diferentes para diferentes tipos de objeto. Por exemplo, um objeto do Active Directory usará o membro ADS_RIGHT_GENERIC_READ da enumeração ADS_RIGHTS_ENUM para a propriedade IADsAccessControlEntry.AccessMask, mas o direito de acesso equivalente para um objeto de arquivo é FILE_GENERIC_READ. Não é seguro assumir que todos os valores de propriedade serão os mesmos para objetos do Active Directory e objetos que não são do Active Directory. A lista a seguir mostra as propriedades IADsAccessControlEntry que diferem para objetos que não são do Active Directory e onde os valores apropriados podem ser obtidos.

AccessMask

Para obter mais informações e uma lista de valores possíveis para objetos de compartilhamento de arquivos ou arquivos, consulte Segurança de arquivos e direitos de acesso.

Para obter mais informações e uma lista de valores possíveis para objetos do Registro, consulte Segurança da chave do Registro e direitos de acesso.

AceType

Para obter mais informações, consulte o membro AceType da estrutura ACE_HEADER.

AceFlags

Para obter mais informações, consulte o membro AceFlags da estrutura ACE_HEADER .

Sinalizadores

Contém zero ou uma combinação de um ou mais dos seguintes valores de WinNT.h.

ACE_OBJECT_TYPE_PRESENT (1)

ObjectType contém um valor válido.

ACE_INHERITED_OBJECT_TYPE_PRESENT (2)

InheritedObjectType contém um valor válido.

ObjectType

Para obter mais informações, consulte o membro ObjectType das estruturas ACCESS_DENIED_OBJECT_ACE, ACCESS_ALLOWED_OBJECT_ACE e similares. Essa propriedade não deve ser definida ou modificada para objetos que não sejam do Active Directory.

InheritedObjectType

Para obter mais informações, consulte o membro InheritedObjectType das estruturas ACCESS_DENIED_OBJECT_ACE, ACCESS_ALLOWED_OBJECT_ACE e similares. Essa propriedade não deve ser definida ou modificada para objetos que não sejam do Active Directory.

Normalmente, IADsSecurityUtility.GetSecurityDescriptor recuperará todas as partes do descritor de segurança, como proprietário, grupo, SACL ou DACL. Da mesma forma, IADsSecurityUtility.SetSecurityDescriptor substituirá todas as partes do descritor de segurança por padrão. Você pode usar a propriedade IADsSecurityUtility.SecurityMask para especificar partes individuais do descritor de segurança a serem recuperadas ou definidas. Por exemplo, você pode definir SecurityMask como ADS_SECURITY_INFO_DACL antes de chamar GetSecurityDescriptor para recuperar apenas a DACL sem recuperar as outras partes do descritor de segurança.

Para obter mais informações e um exemplo de código que usa a interface IADsSecurityUtility para adicionar uma ACE a um arquivo, consulte Código de exemplo para adicionar uma ACE a um arquivo.

O código de exemplo a seguir fornece os identificadores constantes para objetos de arquivo, compartilhamento de arquivo e Registro para as propriedades AccessMask, AceType, AceFlags e Flags para uso com o Visual Basic e o 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