도메인의 루트뿐만 아니라 도메인의 모든 컨테이너 또는 OU(조직 구성 단위)에 그룹을 배치할 수 있습니다. 즉, 그룹은 디렉터리 계층 구조의 여러 위치에 있을 수 있습니다. 따라서 그룹을 열거하기 위한 두 가지 선택 항목이 있습니다.
컨테이너, OU 또는 도메인의 루트에 직접 포함된 그룹을 열거합니다.
열거할 그룹이 포함된 컨테이너 개체에 명시적으로 바인딩하고, IADsContainer.Filter 속성을 사용하여 "groups"가 포함된 필터를 클래스로 설정하고, IADsContainer::get__NewEnum 메서드를 사용하여 그룹 개체를 열거합니다.
이 기술은 컨테이너 또는 OU 개체에 직접 포함된 그룹을 열거합니다. 컨테이너에 잠재적으로 다른 그룹을 포함할 수 있는 다른 컨테이너가 포함된 경우 해당 컨테이너에 바인딩하고 해당 컨테이너의 그룹을 재귀적으로 열거해야 합니다. 그룹 개체를 조작하고 특정 속성만 읽으려면 옵션 2에 설명된 심층 검색을 사용합니다.
열거형은 각 그룹 개체를 나타내는 ADSI COM 개체에 대한 포인터를 반환하므로 QueryInterface 호출하여 IADs, IADsGroup및 IADsPropertyList 인터페이스 포인터를 그룹 개체에 가져올 수 있습니다. 즉, 각 그룹 개체에 명시적으로 바인딩하지 않고도 컨테이너의 각 열거형 그룹 개체에 대한 인터페이스 포인터를 가져올 수 있습니다. 컨테이너 내에서 직접 모든 그룹에 대해 작업을 수행하려면 IADs 또는 IADsGroup 메서드를 호출하기 위해 열거형에 각 그룹에 바인딩할 필요가 없습니다. 그룹에서 특정 속성을 검색하려면 두 번째 옵션에 설명된 대로 IDirectorySearch 사용합니다.
이에 대한 예외는 모든 사용자, 인증된 사용자, BATCH 등과 같이 잘 알려진 보안 주체인 멤버가 포함된 그룹을 열거하려고 할 때 발생합니다. 이러한 유형의 개체에 바인딩할 수 없으므로 클래스, ADsPath 및 Name과 같은 특정 IADs 메서드가 열거된 멤버에서 호출될 때 올바른 결과를 반환하기 때문에 바인딩하는 것처럼 보일 수 있더라도 WinNT 범위에서 그룹을 열거할 때 나열되지 않습니다.
트리에서 모든 그룹을 찾으려면 "objectCategory=group"에 대한 심층 검색을 수행합니다.
먼저 검색을 시작할 컨테이너 개체에 바인딩합니다. 예를 들어 도메인의 모든 그룹을 찾으려면 도메인의 루트에 바인딩합니다. 포리스트의 모든 그룹을 찾으려면 글로벌 카탈로그에 바인딩하고 GC의 루트에서 검색합니다.
그런 다음 IDirectorySearch 사용하여 포함된 검색 필터(objectCategory=group) 및 ADS_SCOPE_SUBTREE검색 기본 설정을 사용하여 쿼리합니다.
메모
ADS_SCOPE_ONELEVEL 검색 기본 설정으로 검색을 수행하여 바인딩된 컨테이너 개체의 직접 콘텐츠로 검색을 제한할 수 있습니다.
IDirectorySearch 그룹에서 특정 속성의 값만 검색합니다. 값을 검색하려면 IDirectorySearch사용합니다. 검색에서 반환된 그룹 개체를 조작하려면, 즉 IADs 사용하거나 IADsGroup메서드를명시적으로 바인딩합니다. 이렇게 하려면 distinguishedName 검색에서 반환할 속성 중 하나로 지정하고 반환된 고유 이름을 사용하여 검색에서 반환된 각 그룹에 바인딩합니다.
특정 속성만 검색됩니다. 그룹 클래스의 가능한 모든 특성을 명시적으로 지정하지 않고는 모든 특성을 검색할 수 없습니다.