Énumération des utilisateurs
Contrairement aux domaines Windows NT 4.0, les utilisateurs Windows 2000 peuvent être placés dans n’importe quel conteneur ou unité d’organisation (UO) d’un domaine, ainsi que dans la racine du domaine. Cela signifie que les utilisateurs peuvent se trouver à de nombreux emplacements dans la hiérarchie d’annuaires. Par conséquent, vous avez deux choix pour énumérer les utilisateurs :
Énumérez les utilisateurs directement contenus dans un conteneur, une unité d’organisation ou à la racine du domaine :
Liez explicitement à l’objet conteneur qui contient les utilisateurs que vous souhaitez énumérer, définissez un filtre contenant « user » comme classe à l’aide de la propriété IADsContainer.Filter et utilisez la méthode IADsContainer::get__NewEnum pour énumérer les objets utilisateur.
Cette technique peut être utilisée pour énumérer les utilisateurs qui sont directement contenus dans un conteneur ou un objet d’unité d’organisation. Si le conteneur contient d’autres conteneurs qui peuvent potentiellement contenir d’autres utilisateurs, vous devez les lier à ces conteneurs et énumérer de manière récursive les utilisateurs sur ces conteneurs. S’il n’est pas nécessaire de manipuler les objets utilisateur et que vous devez uniquement lire des propriétés spécifiques, utilisez la recherche approfondie décrite dans Option 2.
Étant donné que l’énumération renvoie des pointeurs vers des objets COM ADSI représentant chaque objet utilisateur, vous pouvez appeler QueryInterface pour obtenir des pointeurs d’interface IAD, IADsUser et IADsPropertyList vers l’objet utilisateur. Cela signifie que vous pouvez obtenir des pointeurs d’interface vers chaque objet utilisateur énuméré dans un conteneur sans avoir à lier explicitement à chaque objet utilisateur. Pour effectuer des opérations sur tous les utilisateurs directement dans un conteneur, l’énumération évite d’avoir à établir une liaison à chaque utilisateur afin d’appeler des iads ou des méthodes IADsUser . Pour récupérer des propriétés spécifiques d’utilisateurs, utilisez IDirectorySearch comme décrit dans l’option 2.
Effectuez une recherche approfondie pour (&(objectClass=user)(objectCategory=person)) pour rechercher tous les utilisateurs dans une arborescence :
Tout d’abord, liez à l’objet conteneur où commencer la recherche. Par exemple, pour rechercher tous les utilisateurs d’un domaine, liez à la racine du domaine ; pour rechercher tous les utilisateurs de la forêt, liez au catalogue global et recherchez à partir de la racine du gc.
Utilisez ensuite IDirectorySearch pour interroger à l’aide d’un filtre de recherche contenant (&(objectClass=user)(objectCategory=person)) et la préférence de recherche de ADS_SCOPE_SUBTREE.
Vous pouvez effectuer une recherche avec une préférence de recherche de ADS_SCOPE_ONELEVEL pour limiter la recherche au contenu direct de l’objet conteneur auquel vous êtes lié.
IDirectorySearch récupère uniquement les valeurs de propriétés spécifiques des utilisateurs. Pour récupérer des valeurs, utilisez IDirectorySearch. Pour manipuler les objets utilisateur retournés par une recherche, c’est-à-dire que vous souhaitez utiliser des iads ou des méthodes IADsUser , vous devez les lier explicitement. Pour ce faire, spécifiez distinguishedName comme l’une des propriétés à retourner à partir de la recherche et utilisez les noms uniques retournés pour lier à chaque utilisateur retourné dans la recherche.
Seules des propriétés spécifiques sont récupérées. Vous ne pouvez pas récupérer tous les attributs sans spécifier explicitement tous les attributs possibles de la classe user.