Compartilhar via


Associar-se ao catálogo Global

O Catálogo Global é um namespace que contém dados de diretório para todos os domínios em uma floresta. O Catálogo Global contém uma réplica parcial de cada diretório de domínio. Ele contém uma entrada para cada objeto na floresta corporativa, mas não contém todas as propriedades de cada objeto. Em vez disso, ele contém apenas as propriedades especificadas para inclusão no Catálogo Global.

O Catálogo Global é armazenado em servidores específicos em toda a empresa. Somente controladores de domínio podem servir como servidores de Catálogo Global. Os administradores indicam se um determinado controlador de domínio mantém um Catálogo Global usando o Gerenciador de Serviços e Sites do Active Directory.

Para vincular ao Catálogo Global com ADSI, use o moniker "GC:".

Há duas maneiras de vincular ao Catálogo Global para executar uma pesquisa em uma floresta:

  • Vincule-se ao objeto raiz da empresa para pesquisar em todos os domínios na floresta.
  • Vincule-se a um objeto específico para pesquisar esse objeto e seus filhos. Por exemplo, se você vincular a um domínio que tenha dois domínios abaixo dele em uma árvore de domínio na floresta, poderá pesquisar nesses três domínios. Lembre-se de que o nome distinto para o objeto a ser vinculado é exatamente o mesmo que o nome distinto usado para vincular ao namespace "LDAP:". Lembre-se de que "LDAP:" é uma réplica completa de um único domínio e que "GC:" é uma réplica parcial de todos os domínios na floresta.

Assim como acontece com o moniker "LDAP:", você pode usar a vinculação sem servidor ou vincular a um servidor de Catálogo Global específico. Se estiver pesquisando na floresta atual, use a associação sem servidor. No entanto, se estiver pesquisando em outra floresta, especifique um nome de domínio ou um servidor de Catálogo Global ao qual se vincular, como mostrado nos exemplos a seguir.

Vincular usando o nome de domínio:

GC://fabrikam.com

Vincular usando o nome do servidor:

GC://servername

Você também pode vincular a um objeto específico dentro do Catálogo Global. Para vincular ao objeto sales no domínio fabrikam, use o seguinte formato.

GC://fabrikam.com/DC=sales,DC=fabrikam,DC=com

Ou, para vincular ao objeto de vendas no servidor, use o seguinte formato.

GC://servername.fabrikam.com/DC=sales,DC=fabrikam,DC=com

Para pesquisar a floresta inteira

  1. Vincule-se à raiz do namespace Catálogo Global.
  2. Enumere o contêiner Catálogo Global. O contêiner Catálogo Global contém um único objeto que você pode usar para pesquisar a floresta inteira.
  3. Use o objeto no contêiner para executar a pesquisa. Em C/C++, chame QueryInterface para obter um ponteiro IDirectorySearch no objeto para que você possa usar a interface IDirectorySearch para executar a pesquisa. No Visual Basic, use o objeto retornado da enumeração em sua consulta ADO.

Para enumerar os servidores do Catálogo Global em um site, execute uma pesquisa de subárvore LDAP de "cn=yoursite,cn=<sites,DN< do configurationNamingContext>", usando a seguinte cadeia de caracteres de> filtro.

(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))

Esse filtro usa o operador de regra de correspondência de LDAP_MATCHING_RULE_BIT_AND (1.2.840.113556.1.4.803) para localizar objetos nTDSDSA que têm o bit de ordem baixa definido na máscara de bits do atributo options. O bit de ordem baixa, que corresponde à constante NTDSDSA_OPT_IS_GC definida em Ntdsapi.h, identifica o objeto nTDSDSA de um servidor de Catálogo Global. Para obter mais informações sobre regras correspondentes, consulte Sintaxe do filtro de pesquisa.

O pai do objeto nTDSDSA é o objeto de servidor e a propriedade dNSHostName do objeto de servidor é o nome DNS do servidor de Catálogo Global.

Não é possível usar constantes de #define, como NTDSDSA_OPT_IS_GC e LDAP_MATCHING_RULE_BIT_AND diretamente em uma cadeia de caracteres de filtro de pesquisa. No entanto, você pode usar essas constantes como argumentos para uma função como swprintf_s para inserir os valores constantes em uma cadeia de caracteres de filtro.

O catálogo global não representa toda a estrutura da árvore florestal. Por exemplo, você pode esperar que o exemplo de código a seguir enumere todos os domínios na floresta e todos os objetos filho de cada domínio. Na realidade, o que ele realmente faz é enumerar todos os domínios na floresta, mas nenhum dos objetos de domínio enumerados contém filhos. Esta é uma limitação do catálogo global.

Dim oGC As IADs
Dim oDomain As IADs
Dim oChild As IADs

Set oGC = GetObject("GC:")
For Each oDomain In oGC
    ' Print the name of the domain.
    Debug.Print oDomain.Name
    
    ' Enumerate the child objects of the domain.
    For Each oChild In oDomain
        Debug.Print oChild.Name
    Next
Next

Para corrigir isso, é necessário vincular a cada objeto de domínio e, em seguida, enumerar os objetos filho de cada domínio. A técnica adequada é mostrada no exemplo de código a seguir.

Dim oGC As IADs
Dim oDomainEnum As IADs
Dim oDomainBind As IADs
Dim oChild As IADs

Set oGC = GetObject("GC:")
For Each oDomainEnum In oGC
    ' Print the name of the domain.
    Debug.Print oDomainEnum.Name
    
    ' Bind to the domain.
    Set oDomainBind = GetObject("LDAP://" + oDomainEnum.Name)
    
    ' Enumerate the child objects of the domain.
    For Each oChild In oDomainBind
        Debug.Print oChild.Name
    Next
Next

Para obter mais informações e exemplos de código que mostram como pesquisar uma floresta inteira, consulte Código de exemplo para pesquisar uma floresta.