Criando descritores de segurança para novos objetos de diretório

Você pode usar ADSI para criar um descritor de segurança e defini-lo como a propriedade nTSecurityDescriptor de um novo objeto ou usá-lo para substituir a propriedade nTSecurityDescriptor de um objeto existente.

Para criar um descritor de segurança para um objeto:

  1. Use CoCreateInstance para criar o objeto ADSI COM para o novo descritor de segurança e obter um ponteiro de interface IADsSecurityDescriptor para esse objeto. Lembre-se de que o ID da classe é CLSID_SecurityDescriptor.
  2. Use o método IADsSecurityDescriptor::p ut_Owner para definir o proprietário do objeto. O titular é um usuário, grupo ou outra entidade de segurança. Uma aplicação deve utilizar o valor da propriedade apropriada do objeto de utilizador ou grupo da entidade gestora ao qual aplicar a ACE.
  3. Use o método IADsSecurityDescriptor::put_Control para controlar se DACLs e SACLs são herdadas pelo objeto de seu contentor pai.
  4. Use CoCreateInstance para criar o objeto COM ADSI associado à DACL para o novo descritor de segurança e obter um ponteiro de interface IADsAccessControlList para esse objeto. Lembre-se de que o ID da classe é CLSID_AccessControlList.
  5. Para cada ACE para adicionar à DACL, use CoCreateInstance para criar o objeto COM ADSI para a nova ACE e obter um ponteiro de interface IADsAccessControlEntry para esse objeto. Lembre-se de que o ID da classe é CLSID_AccessControlEntry.
  6. Para cada ACE a ser adicionada à DACL, defina as propriedades da ACE usando os métodos de propriedade do objetoIADsAccessControlEntry da ACE. Para obter mais informações sobre as propriedades a serem definidas em uma ACE, consulte Definindo direitos de acesso em um objeto.
  7. Para cada ACE a ser adicionada à DACL, use o método QueryInterface no objeto IADsAccessControlEntry para obter um ponteiro IDispatch. O método IADsAccessControlList::AddAce requer um IDispatch ponteiro de interface para a ACE.
  8. Para cada ACE a ser adicionada à DACL, use IADsAccessControlList::AddAce para adicionar a nova ACE à DACL. Esteja ciente de que a ordem das ACEs dentro da ACL pode afetar a avaliação do acesso ao objeto. O acesso correto ao objeto pode exigir que você crie uma nova ACL, adicione as ACEs da ACL existente na ordem correta à nova ACL e, em seguida, substitua a ACL existente no descritor de segurança pela nova ACL. Para obter mais informações, consulte Ordem das ACEs numaDACL.
  9. Siga as etapas 4 a 8 para criar a SACL para o novo descritor de segurança.
  10. Utilize o método IADsSecurityDescriptor::put_DiscretionaryAcl para definir a DACL. Para obter mais informações sobre DACLs, consulte DACLs nulas e DACLs vazias.
  11. Use o método IADsSecurityDescriptor::put_SystemAcl para definir a SACL.
  12. Converta o objeto IADsSecurityDescriptor num VARIANT usando o método QueryInterface do objeto IADsSecurityDescriptor para obter uma interface IDispatch. Em seguida, defina o membro vt do VARIANT como VT_DISPATCH e defina o membro pdispVal do VARIANT igual ao ponteiro IDispatch.
  13. Obtenha um ponteiro de interface IADs para o objeto.
  14. Use o método IADs::Put com "nTSecurityDescriptor" e o VARIANT criado acima para escrever o novo descritor de segurança no cache de propriedades.
  15. Use o método IADs::SetInfo para atualizar a propriedade no objeto no diretório.