Enumerando usuários
Ao contrário dos domínios do Windows NT 4.0, os usuários do Windows 2000 podem ser colocados em qualquer contêiner ou unidade organizacional (OU) em um domínio, bem como a raiz do domínio. Isso significa que os usuários podem estar em vários locais na hierarquia de diretórios. Portanto, você tem duas opções para enumerar usuários:
Enumere os usuários contidos diretamente em um contêiner, UO ou na raiz do domínio:
Vincule explicitamente ao objeto de contêiner que contém os usuários que você está interessado em enumerar, defina um filtro contendo "user" como a classe usando a propriedade IADsContainer.Filter e use o método IADsContainer::get__NewEnum para enumerar os objetos de usuário.
Essa técnica pode ser usada para enumerar usuários que estão diretamente contidos em um contêiner ou objeto de UO. Se o contêiner contiver outros contêineres que possam potencialmente conter outros usuários, você deverá vincular a esses contêineres e enumerar recursivamente os usuários nesses contêineres. Se não for necessário manipular os objetos de usuário e precisar apenas ler propriedades específicas, use a pesquisa profunda descrita na Opção 2.
Como a enumeração retorna ponteiros para objetos ADSI COM que representam cada objeto de usuário, você pode chamar QueryInterface para obter ponteiros de interface IADs, IADsUser e IADsPropertyList para o objeto de usuário. Isso significa que você pode obter ponteiros de interface para cada objeto de usuário enumerado em um contêiner sem precisar vincular explicitamente a cada objeto de usuário. Para executar operações em todos os usuários diretamente em um contêiner, a enumeração evita a necessidade de vincular a cada usuário para chamar IADs ou IADsMétodos de usuário . Para recuperar propriedades específicas dos usuários, use IDirectorySearch conforme descrito na opção 2.
Execute uma pesquisa profunda por (&(objectClass=user)(objectCategory=person)) para localizar todos os usuários em uma árvore:
Primeiro, vincule-se ao objeto de contêiner onde começar a pesquisa. Por exemplo, para localizar todos os usuários em um domínio, vincule-se à raiz do domínio; para localizar todos os usuários na floresta, vincule-se ao catálogo global e pesquise a partir da raiz do GC.
Em seguida, use IDirectorySearch para consultar usando um filtro de pesquisa contendo (&(objectClass=user)(objectCategory=person)) e preferência de pesquisa de ADS_SCOPE_SUBTREE.
Você pode executar uma pesquisa com uma preferência de pesquisa de ADS_SCOPE_ONELEVEL para limitar a pesquisa ao conteúdo direto do objeto de contêiner ao qual você vinculou.
IDirectorySearch recupera apenas os valores de propriedades específicas dos usuários. Para recuperar valores, use IDirectorySearch. Para manipular os objetos de usuário retornados de uma pesquisa, ou seja, você deseja usar IADs ou IADsUser métodos, você deve vincular explicitamente a eles. Para fazer isso, especifique distinguishedName como uma das propriedades a serem retornadas da pesquisa e use os nomes distintos retornados para vincular a cada usuário retornado na pesquisa.
Somente propriedades específicas são recuperadas. Não é possível recuperar todos os atributos sem especificar explicitamente todos os atributos possíveis da classe de usuário.