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 administrador é um usuário, grupo ou outra entidade de segurança. Um aplicativo deve usar o valor da propriedade apropriada do objeto de usuário ou grupo do administrador ao qual aplicar a ACE.
  3. Use o método IADsSecurityDescriptor::p ut_Control para controlar se DACLs e SACLs são herdadas pelo objeto de seu contêiner pai.
  4. Use CoCreateInstance para criar o objeto ADSI COM para a 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 a ser adicionada à DACL, use CoCreateInstance para criar o objeto ADSI COM 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 objeto IADsAccessControlEntry 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 ponteiro de interface IDispatch para a ACE.
  8. Para cada ACE a ser adicionada à DACL, use IADsAccessControlList::AddAce para adicionar a nova ACE à DACL. Lembre-se 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 de ACEs em uma DACL.
  9. Siga as etapas 4 a 8 para criar a SACL para o novo descritor de segurança.
  10. Use o método IADsSecurityDescriptor::p ut_DiscretionaryAcl para definir a DACL. Para obter mais informações sobre DACLs, consulte DACLs nulas e DACLs vazias.
  11. Use o método IADsSecurityDescriptor::p ut_SystemAcl para definir a SACL.
  12. Converter o objeto IADsSecurityDescriptor em um 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::P ut com "nTSecurityDescriptor" e o VARIANT criado acima para gravar 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.