Windows NT 4.0 도메인과 달리 Windows 2000 사용자는 도메인의 루트뿐만 아니라 도메인의 모든 컨테이너 또는 OU(조직 구성 단위)에 배치할 수 있습니다. 즉, 사용자는 디렉터리 계층 구조의 여러 위치에 있을 수 있습니다. 따라서 사용자를 열거하기 위한 두 가지 선택 사항이 있습니다.
컨테이너, OU 또는 도메인의 루트에 직접 포함된 사용자를 열거합니다.
열거하려는 사용자가 포함된 컨테이너 개체에 명시적으로 바인딩하고, "user"가 포함된 필터를 IADsContainer.Filter 속성을 사용하여 클래스로 설정하고, IADsContainer::get__NewEnum 메서드를 사용하여 사용자 개체를 열거합니다.
이 기술은 컨테이너 또는 OU 개체에 직접 포함된 사용자를 열거하는 데 사용할 수 있습니다. 컨테이너에 잠재적으로 다른 사용자를 포함할 수 있는 다른 컨테이너가 포함된 경우 해당 컨테이너에 바인딩하고 해당 컨테이너에서 사용자를 재귀적으로 열거해야 합니다. 사용자 개체를 조작할 필요가 없으며 특정 속성만 읽어야 하는 경우 옵션 2에 설명된 심층 검색을 사용합니다.
열거형은 각 사용자 개체를 나타내는 ADSI COM 개체에 대한 포인터를 반환하므로 QueryInterface를 호출하여 사용자 개체에 대한 IADs, IADsUser, 그리고 IADsPropertyList 인터페이스 포인터를 얻을 수 있습니다. 즉, 각 사용자 개체에 명시적으로 바인딩하지 않고도 컨테이너의 열거된 각 사용자 개체에 대한 인터페이스 포인터를 가져올 수 있습니다. 컨테이너 내에서 직접 모든 사용자에 대한 작업을 수행하려면 열거형은 IADs 또는 IADsUser 메서드를 호출하기 위해 각 사용자에게 바인딩할 필요가 없습니다. 사용자로부터 특정 속성을 검색하려면 옵션 2에 설명된 대로 IDirectorySearch 사용합니다.
(&(objectClass=user)(objectCategory=person))에 대한 심층 검색을 수행하여 트리의 모든 사용자를 찾습니다.
먼저 검색을 시작할 컨테이너 개체에 바인딩합니다. 예를 들어 도메인의 모든 사용자를 찾으려면 도메인의 루트에 바인딩합니다. 포리스트의 모든 사용자를 찾으려면 글로벌 카탈로그에 바인딩하고 GC의 루트에서 검색합니다.
그런 다음 IDirectorySearch 사용하여 (&(objectClass=user)(objectCategory=person)) 및 ADS_SCOPE_SUBTREE 검색 기본 설정을 포함하는 검색 필터를 사용하여 쿼리합니다.
ADS_SCOPE_ONELEVEL 검색 기본 설정으로 검색을 수행하여 바인딩된 컨테이너 개체의 직접 콘텐츠로 검색을 제한할 수 있습니다.
IDirectorySearch 사용자로부터 특정 속성의 값만 검색합니다. 값을 검색하려면 IDirectorySearch사용합니다. 검색에서 반환된 사용자 개체를 조작하려면 IADs 또는 IADsUser 메서드를 사용하려면 명시적으로 바인딩해야 합니다. 이렇게 하려면 distinguishedName 검색에서 반환할 속성 중 하나로 지정하고 반환된 고유 이름을 사용하여 검색에서 반환된 각 사용자에 바인딩합니다.
특정 속성만 검색됩니다. 사용자 클래스의 가능한 모든 특성을 명시적으로 지정하지 않고는 모든 특성을 검색할 수 없습니다.