Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten temat zawiera przykładowy kod, który wyszukuje las.
Poniższy przykład kodu C/C++ wiąże się z katalogem głównym wykazu globalnego i wylicza pojedynczy obiekt, który jest katalogem głównym lasu, dzięki czemu może służyć do przeszukiwania całego lasu.
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.
Poniższy przykład kodu C/C++ zawiera funkcję zwracającą IDirectorySearch wskaźnik używany do przeszukiwania całego lasu.
Funkcja wykonuje powiązanie bezserwerowe z katalogiem głównym wykazu globalnego, wylicza pojedynczy element, który jest katalogiem głównym lasu i może służyć do przeszukiwania całego lasu, wywołuje QueryInterface, aby uzyskać IDirectorySearch wskaźnik do obiektu i zwraca ten wskaźnik do użycia przez obiekt wywołujący do przeszukiwania lasu.
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;
}