Compartilhar via


Seletor de objetos de diretório

A caixa de diálogo do seletor de objetos de diretório permite que um usuário selecione um ou mais objetos do catálogo global, de um domínio ou computador ou de um grupo de trabalho. Os tipos de objeto dos quais um usuário pode selecionar incluem objetos de usuário, contato, grupo e computador. Para obter mais informações sobre os Serviços de Domínio Active Directory, consulte Serviços de Domínio Active Directory.

Para exibir uma caixa de diálogo do seletor de objetos:

  1. Chame a função CoCreateInstance ou CoCreateInstanceEx para criar uma instância da interface IDsObjectPicker.
  2. Chame o método IDsObjectPicker::Initialize para inicializar a caixa de diálogo.
  3. Chame o método IDsObjectPicker::InvokeDialog para exibir a caixa de diálogo.
  4. Chame o método IDataObject::GetData da instância IDataObject retornada pela caixa de diálogo do seletor de objetos para recuperar os dados CFSTR_DSOP_DS_SELECTION_LIST. O formato da área de transferência CFSTR_DSOP_DS_SELECTION_LIST fornece um HGLOBAL que contém uma estrutura DS_SELECTION_LIST . A estrutura DS_SELECTION_LIST contém dados sobre os itens selecionados na caixa de diálogo do seletor de objetos.

Se o SID (Identificador de Segurança) for necessário para um objeto, ele deverá ser solicitado diretamente do seletor de objetos adicionando o atributo objectSID à lista de atributos a serem recuperados para o objeto selecionado. Passar o nome do objeto retornado para a função LsaLookupNames ou LookupAccountName não é recomendado porque a pesquisa de nome será redundante e pode falhar em alguns casos.

Se uma referência a qualquer objeto selecionado for salva, o nome distinto não deverá ser salvo porque o objeto pode ser movido, ser renomeado ou pode ser alterado devido a diferenças de localidade. Para entidades de segurança, o objectSID deve ser solicitado para o objeto e salvo com segurança. Se o nome da entidade de segurança for necessário posteriormente, ele poderá ser recuperado com a função LookupAccountSid. Para todos os outros objetos, o objectGUID deve ser solicitado e salvo.

Inicialização

Quando a caixa de diálogo do seletor de objetos é inicializada, um conjunto de tipos de escopo e filtros é especificado. Os tipos de escopo especificados determinam os locais, domínios ou computadores, por exemplo, dos quais um usuário pode selecionar objetos. Os filtros determinam os tipos de objetos que um usuário pode selecionar de um determinado tipo de escopo. Para obter mais informações, consulte a seção Escopos e filtros abaixo.

Por padrão, um usuário pode selecionar um único objeto na caixa de diálogo do seletor de objetos de diretório. Para habilitar várias seleções, defina o sinalizador DSOP_FLAG_MULTISELECT no membro flOptions da estrutura DSOP_INIT_INFO quando a caixa de diálogo for inicializada.

Escopos e Filtros

A lista suspensa Examinar contém os escopos dos quais um usuário pode selecionar objetos. Um escopo é um domínio, computador, grupo de trabalho ou catálogo global que armazena dados sobre um conjunto de objetos disponíveis e fornece acesso a eles. As entradas na lista de escopo dependem dos tipos de escopo e do computador de destino especificado quando o método IDsObjectPicker::Initialize foi chamado pela última vez para inicializar a caixa de diálogo do seletor de objetos.

Um tipo de escopo é uma categoria genérica de escopos, como todos os domínios na empresa à qual o computador de destino pertence, ou o catálogo global da empresa do computador de destino ou o próprio computador de destino. Para cada tipo de escopo especificado, a caixa de diálogo usa o contexto do computador de destino para determinar as entradas da lista de escopo.

O método IDsObjectPicker::Initialize leva um ponteiro para uma estrutura DSOP_INIT_INFO que contém uma matriz de estruturas DSOP_SCOPE_INIT_INFO. Cada entrada na matriz DSOP_SCOPE_INIT_INFO especifica um ou mais tipos de escopo, bem como filtros aplicáveis e outros atributos. Os filtros determinam os tipos de objetos, como usuários, grupos, contatos e computadores, que o usuário pode selecionar de um determinado tipo de escopo. Quando o usuário seleciona um escopo da lista, a caixa de diálogo aplica os filtros para esse tipo de escopo para exibir uma lista de objetos dos quais o usuário pode selecionar.

Cada estrutura DSOP_SCOPE_INIT_INFO contém uma estrutura DSOP_FILTER_FLAGS que especifica os filtros para esse tipo de escopo. A estrutura DSOP_FILTER_FLAGS distingue entre escopos de nível superior e inferior:

  • Um escopo de nível superior é um catálogo global ou um domínio que oferece suporte ao provedor LDAP ADSI.
  • Um escopo de nível inferior inclui grupos de trabalho e todos os computadores individuais. A caixa de diálogo usa o provedor ADSI WinNT para acessar um escopo de nível inferior.

Há dois conjuntos de sinalizadores de filtro definidos para uso na estrutura DSOP_FILTER_FLAGS : um para escopos de nível superior e outro para escopos de nível inferior. O membro Uplevel da estrutura DSOP_FILTER_FLAGS é uma estrutura DSOP_UPLEVEL_FILTER_FLAGS que especifica os filtros para escopos de nível superior. O membro flDownlevel da estrutura DSOP_FILTER_FLAGS é um conjunto de sinalizadores que especificam os filtros para escopos de nível inferior.