フォレストを検索するコード例
このトピックには、フォレストを検索するコード例が含まれています。
次のC/C++コード例では、グローバルカタログのルートにバインドし、フォレストのルートである1つのオブジェクトを列挙して、フォレスト全体の検索に使用できるようにします。
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ポインターを返す関数が含まれています。
この関数は、グローバルカタログのルートへのサーバーレスバインドを実行し、フォレストのルートであり、フォレスト全体の検索に使用できる1つの項目を列挙し、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;
}