Enumerar usuarios
A diferencia de los dominios de Windows NT 4.0, los usuarios de Windows 2000 se pueden colocar en cualquier contenedor o unidad organizativa (OU) de un dominio, así como en la raíz del dominio. Esto significa que los usuarios pueden estar en numerosas ubicaciones de la jerarquía de directorios. Por lo tanto, tiene dos opciones para enumerar usuarios:
Enumere los usuarios incluidos directamente en un contenedor, una unidad organizativa o en la raíz del dominio:
Enlazar explícitamente al objeto contenedor que contiene los usuarios que le interesan enumerar, establecer un filtro que contenga "usuario" como clase mediante la propiedad IADsContainer.Filter y usar el método IADsContainer::get__NewEnum para enumerar los objetos de usuario.
Esta técnica se puede usar para enumerar usuarios que están contenidos directamente en un contenedor o un objeto ou. Si el contenedor contiene otros contenedores que pueden contener potencialmente otros usuarios, debe enlazar a esos contenedores y enumerar de forma recursiva los usuarios de esos contenedores. Si no es necesario manipular los objetos de usuario y solo necesita leer propiedades específicas, use la búsqueda en profundidad descrita en la opción 2.
Dado que la enumeración devuelve punteros a objetos COM ADSI que representan cada objeto de usuario, puede llamar a QueryInterface para obtener iaDs, IADsUser e IADsPropertyList punteros de interfaz al objeto de usuario. Esto significa que puede obtener punteros de interfaz a cada objeto de usuario enumerado en un contenedor sin tener que enlazar explícitamente a cada objeto de usuario. Para realizar operaciones en todos los usuarios directamente dentro de un contenedor, la enumeración evita tener que enlazar a cada usuario para llamar a los métodos IAD o IADsUser . Para recuperar propiedades específicas de los usuarios, use IDirectorySearch como se describe en la opción 2.
Realice una búsqueda profunda de (&(objectClass=user)(objectCategory=person)) para buscar todos los usuarios en un árbol:
En primer lugar, enlace al objeto contenedor donde se va a iniciar la búsqueda. Por ejemplo, para buscar todos los usuarios de un dominio, enlazar a la raíz del dominio; para buscar todos los usuarios del bosque, enlazar al catálogo global y buscar desde la raíz del GC.
A continuación, use IDirectorySearch para consultar mediante un filtro de búsqueda que contenga (&(objectClass=user)(objectCategory=person)) y las preferencias de búsqueda de ADS_SCOPE_SUBTREE.
Puede realizar una búsqueda con una preferencia de búsqueda de ADS_SCOPE_ONELEVEL para limitar la búsqueda al contenido directo del objeto contenedor al que se enlaza.
IDirectorySearch recupera solo los valores de propiedades específicas de los usuarios. Para recuperar valores, use IDirectorySearch. Para manipular los objetos de usuario devueltos desde una búsqueda, es decir, desea usar los métodos IAD o IADsUser , debe enlazarlos explícitamente. Para ello, especifique distinguishedName como una de las propiedades que se van a devolver de la búsqueda y use los nombres distintivos devueltos para enlazar a cada usuario devuelto en la búsqueda.
Solo se recuperan propiedades específicas. No se pueden recuperar todos los atributos sin especificar explícitamente todos los atributos posibles de la clase de usuario.