Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses Thema enthält Beispielcode, der eine Gesamtstruktur durchsucht.
Das folgende C/C++-Codebeispiel bindet an den Stamm des globalen Katalogs und listet das einzelne Objekt auf, das der Stamm der Gesamtstruktur ist, sodass es zum Durchsuchen der gesamten Gesamtstruktur verwendet werden kann.
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.
Das folgende C/C++-Codebeispiel enthält eine Funktion, die eine IDirectorySearch Zeiger zurückgibt, die zum Durchsuchen der gesamten Gesamtstruktur verwendet werden.
Die Funktion führt eine serverlose Bindung an den Stamm des globalen Katalogs durch, listet das einzelne Element auf, das den Stamm der Gesamtstruktur darstellt und zum Durchsuchen der gesamten Gesamtstruktur verwendet werden kann, ruft QueryInterface- auf, um einen IDirectorySearch- Zeiger auf das Objekt abzurufen, und gibt diesen Zeiger zurück, der vom Aufrufer zum Durchsuchen der Gesamtstruktur verwendet werden soll.
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;
}