다음을 통해 공유


포리스트 검색을 위한 예제 코드

이 항목에는 포리스트를 검색하는 예제 코드가 포함되어 있습니다.

다음 C/C++ 코드 예제에서는 전역 카탈로그의 루트에 바인딩하고 포리스트의 루트인 단일 개체를 열거하여 전체 포리스트를 검색하는 데 사용할 수 있습니다.

Set gc = GetObject("GC:")
For each child in gc
    Set entpr = child
Next
' Now entpr is an object that can be used
' to search the entire forest.

다음 C/C++ 코드 예제에는 전체 포리스트를 검색하는 데 사용되는 IDirectorySearch 포인터를 반환하는 함수가 포함되어 있습니다.

함수는 전역 카탈로그의 루트에 대한 서버리스 바인딩을 수행하고, 포리스트의 루트이고, 전체 포리스트를 검색하는 데 사용할 수 있는 단일 항목을 열거하고, QueryInterface 를 호출하여 개체에 대한 IDirectorySearch 포인터를 얻고, 호출자가 포리스트를 검색하는 데 사용할 포인터를 반환합니다.

HRESULT GetGC(IDirectorySearch **ppDS)
{
HRESULT hr;
IEnumVARIANT *pEnum = NULL;
IADsContainer *pCont = NULL;
VARIANT var;
IDispatch *pDisp = NULL;
ULONG lFetch;
 
// Set IDirectorySearch pointer to NULL.
*ppDS = NULL;
 
// First, bind to the GC: namespace container object. 
hr = ADsOpenObject(TEXT("GC:"),
                NULL,
                NULL,
                ADS_SECURE_AUTHENTICATION, // Use Secure Authentication.
                IID_IADsContainer,
                (void**)&pCont);
if (FAILED(hr)) {
    _tprintf(TEXT("ADsOpenObject failed: 0x%x\n"), hr);
    goto cleanup;
} 
 
// Get an enumeration interface for the GC container to enumerate the 
// contents. The actual GC is the only child of the GC container.
hr = ADsBuildEnumerator(pCont, &pEnum);
if (FAILED(hr)) {
    _tprintf(TEXT("ADsBuildEnumerator failed: 0x%x\n"), hr);
    goto cleanup;
} 
 
// Now enumerate. There is only one child of the GC: object.
hr = pEnum->Next(1, &var, &lFetch);
if (FAILED(hr)) {
    _tprintf(TEXT("ADsEnumerateNext failed: 0x%x\n"), hr);
    goto cleanup;
} 
 
// Get the IDirectorySearch pointer.
if (( hr == S_OK ) && ( lFetch == 1 ) )     
{    
    pDisp = V_DISPATCH(&var);
    hr = pDisp->QueryInterface( IID_IDirectorySearch, (void**)ppDS); 
}
 
cleanup:
 
if (pEnum)
    ADsFreeEnumerator(pEnum);
if (pCont)
    pCont->Release();
if (pDisp)
    (pDisp)->Release();
return hr;
}