Share via


Enlace al catálogo global

El catálogo global es un espacio de nombres que contiene datos de directorio para todos los dominios de un bosque. El catálogo global contiene una réplica parcial de cada directorio de dominio. Contiene una entrada para cada objeto del bosque de empresa, pero no contiene todas las propiedades de cada objeto. En su lugar, solo contiene las propiedades especificadas para su inclusión en el catálogo global.

El catálogo global se almacena en servidores específicos de toda la empresa. Solo los controladores de dominio pueden actuar como servidores de catálogo global. Los administradores indican si un controlador de dominio determinado contiene un catálogo global mediante el Administrador de sitios y servicios de Active Directory.

Para enlazar al catálogo global con ADSI, use el moniker "GC:".

Hay dos maneras de enlazar con el catálogo global para realizar una búsqueda en un bosque:

  • Enlazar al objeto raíz de empresa para buscar en todos los dominios del bosque.
  • Enlazar a un objeto específico para buscar ese objeto y sus elementos secundarios. Por ejemplo, si enlaza a un dominio que tiene dos dominios debajo de él en un árbol de dominio del bosque, puede buscar en esos tres dominios. Tenga en cuenta que el nombre distintivo del objeto al que se va a enlazar es exactamente el mismo que el nombre distintivo usado para enlazar al espacio de nombres "LDAP:". Recuerde que "LDAP:" es una réplica completa de un único dominio y que "GC:" es una réplica parcial de todos los dominios del bosque.

Al igual que con el moniker "LDAP:", puede usar el enlace sin servidor o enlazar a un servidor de catálogo global específico. Si busca en el bosque actual, use el enlace sin servidor. Sin embargo, si busca en otro bosque, especifique un nombre de dominio o un servidor de catálogo global al que se va a enlazar, como se muestra en los ejemplos siguientes.

Enlace mediante el nombre de dominio:

GC://fabrikam.com

Enlace con el nombre del servidor:

GC://servername

También puede enlazar a un objeto específico dentro del catálogo global. Para enlazar al objeto sales en el dominio fabrikam, use el siguiente formato.

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

O bien, para enlazar con el objeto sales en el servidor, use el siguiente formato.

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

Para buscar en todo el bosque

  1. Enlazar a la raíz del espacio de nombres del catálogo global.
  2. Enumerar el contenedor del catálogo global. El contenedor catálogo global contiene un único objeto que puede usar para buscar en todo el bosque.
  3. Use el objeto del contenedor para realizar la búsqueda. En C/C++, llame a QueryInterface para obtener un puntero IDirectorySearch en el objeto para que pueda usar la interfaz IDirectorySearch para realizar la búsqueda. En Visual Basic, use el objeto devuelto de la enumeración en la consulta de ADO.

Para enumerar los servidores del catálogo global de un sitio, realice una búsqueda de subárbol LDAP de "cn=<yoursite,cn>=sites,DN< de configurationNamingContext>", con la siguiente cadena de filtro.

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

Este filtro usa el operador de regla de coincidencia de LDAP_MATCHING_RULE_BIT_AND (1.2.840.113556.1.4.803) para buscar objetos nTDSDSA que tienen el bit de orden bajo establecido en la máscara de bits del atributo options . El bit de orden bajo, que corresponde a la constante NTDSDSA_OPT_IS_GC definida en Ntdsapi.h, identifica el objeto nTDSDSA de un servidor de catálogo global. Para obtener más información sobre las reglas de coincidencia, vea Sintaxis de filtro de búsqueda.

El elemento primario del objeto nTDSDSA es el objeto de servidor y la propiedad dNSHostName del objeto de servidor es el nombre DNS del servidor de catálogo global.

No se pueden usar constantes de #define como NTDSDSA_OPT_IS_GC y LDAP_MATCHING_RULE_BIT_AND directamente en una cadena de filtro de búsqueda. Sin embargo, puede usar estas constantes como argumentos para una función como swprintf_s para insertar los valores constantes en una cadena de filtro.

El catálogo global no representa toda la estructura de árbol de bosque. Por ejemplo, podría esperar que el ejemplo de código siguiente enumeraría todos los dominios del bosque y todos los objetos secundarios de cada dominio. En realidad, lo que realmente hace es enumerar todos los dominios del bosque, pero ninguno de los objetos de dominio enumerados contiene elementos secundarios. Se trata de una limitación del 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 corregirlo, es necesario enlazar a cada objeto de dominio y, a continuación, enumerar los objetos secundarios de cada dominio. La técnica adecuada se muestra en el ejemplo de código siguiente.

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 obtener más información y ejemplos de código que muestran cómo buscar un bosque completo, vea Código de ejemplo para buscar un bosque.