OLE DB를 사용하여 검색
ADO(ActiveX Data Objects)를 사용하는 Automation 클라이언트와 비 Automation 클라이언트 모두에 대해 ADSI는 OLE DB 쿼리 인터페이스의 하위 집합을 지원하는 OLE DB 공급자를 제공합니다. 이미 쿼리에 OLE DB 인터페이스를 사용하는 클라이언트 코드는 동일한 인터페이스를 사용하여 디렉터리 서비스를 쿼리할 수 있습니다.
OLE DB 구현에서 디렉터리 서비스는 데이터 원본 개체로 노출됩니다. 데이터 원본 개체는 세션 개체의 팩터리이며 IDBInitialize 를 지원하여 디렉터리에 연결하고, IDBCreateSession 을 지원하여 세션 개체를 만들고, IDBProperties 는 기본 네임스페이스에 인증 데이터를 제공하고 쿼리 명령을 제공하고 , IPersist 는 기본 디렉터리 서비스에 데이터 원본 개체를 만드는 데 필요한 데이터를 저장합니다.
OLE DB를 사용하여 Active Directory 쿼리를 수행하려면
- OLE DB 공급자에서 IDBInitialize 인터페이스를 검색합니다. Active Directory의 경우 클래스 식별자 CLSID_ADsDSOObject 사용합니다.
- 사용자 이름 및 암호를 지정하는 연결 데이터의 DBPROP 배열을 빌드합니다.
- IDBProperties 인터페이스에 대해 1단계에서 검색된 IDBInitialize 인터페이스를 쿼리합니다.
- 2단계에서 만든 DBPROP 배열을 전달하는 IDBProperties::SetProperties 메서드를 호출합니다.
- IDBInitialize::Initialize 메서드를 호출하여 OLE DB 공급자에 대한 연결을 설정합니다. 이 경우 는 Active Directory 공급자입니다.
- IDBCreateSession 인터페이스에 대한 IDBInitialize 인터페이스를 쿼리합니다.
- IDBCreateSession::CreateSession 메서드를 호출하여 IDBCreateCommand 형식의 새 인터페이스를 요청합니다.
- IDBCreateCommand::CreateCommand 메서드를 호출하여 ICommandText 인터페이스를 만듭니다.
- ICommandText::SetCommandText 메서드를 호출합니다. 기본 언어와 해당 방언의 실제 쿼리 명령 텍스트를 전달합니다. DBGUID_LDAPDialect 또는 DBGUID_DBSQL 방언으로 사용할 수 있습니다.
- ICommand::Execute를 호출합니다. 결과 집합에 대한 인터페이스인 IRowset 인터페이스가 반환됩니다.
- IColumnsInfo 인터페이스에 대한 IRowset 인터페이스를 쿼리합니다.
- IColumnsInfo::GetColumnInfo 메서드를 호출하여 결과 집합에 대한 열 데이터를 검색합니다.
- DBBINDING 구조체의 배열을 채우고 OLE DB 공급자에게 열별로 데이터 형식을 애플리케이션 코드에 노출하는 방법을 설명합니다. 이 단계를 통해 특정 열에 포함된 TYPE을 지정할 수 있습니다. 또한 반환된 행을 기준으로 열의 오프셋은 열 단위로 여기에 설정됩니다.
- IAccessor 인터페이스에 대한 IRowset 인터페이스를 쿼리합니다.
- 접근자 핸들 배열을 반환하는 IAccessor::CreateAccessor 메서드를 호출합니다. 그런 다음 이 배열을 사용하여 결과 집합의 행에 액세스합니다.
- 행 핸들을 전달하는 IRowset::GetNextRows 및 가져올 행 수를 호출합니다.
- 16단계에서 반환된 집합에서 행 핸들을 전달하는 IRowset::GetData 를 호출합니다. 행에 대한 원시 포인터가 반환됩니다.
검색 필터 구문에 대한 자세한 내용은 검색 필터 구문을 참조하세요.
반환된 처리되지 않은 행 데이터를 읽으려면 13단계에서 만든 DBBINDING 구조를 사용하여 17단계에서 반환된 처리되지 않은 데이터 포인터의 열 오프셋을 계산합니다. 해당 열에 대한 검색 결과는 열의 상태 부분을 읽습니다.
ADSI OLE DB 공급자를 사용하여 Active Directory를 검색하는 방법을 보여 주는 자세한 내용 및 코드 예제는 OLE DB를 사용하여 Active Directory 검색에 대한 예제 코드를 참조하세요.