Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The IADsObjectOptions interface enables direct access to setting and retrieving provider-specific options.
One of the Active Directory object options is to return the host name of a server. The following code example uses the interface to retrieve the host name of the global catalog server.
HRESULT GetGCServerName(VARIANT *vGCServer)
{
HRESULT hr = S_OK
HRESULT hre = S_OK;
IADsContainer *pContainer = NULL;
IUnknown *pUnk = NULL;
IEnumVARIANT *pEnum = NULL;
IDispatch *pDisp = NULL;
IADsObjectOptions *pOpt = NULL;
VARIANT var;
ULONG lFetch = 0;
VariantInit(&var);
// Bind to the global catalog using a serverless bind.
hr = ADsOpenObject(L"GC:", NULL, NULL,
ADS_SECURE_AUTHENTICATION,
IID_IADsContainer, (void**) &pContainer );
if (FAILED(hr))
return (hr);
hr = pContainer->get__NewEnum(&pUnk);
if (SUCCEEDED(hr))
{
hr = pUnk->QueryInterface(IID_IEnumVARIANT, (void**) &pEnum);
if (SUCCEEDED(hr))
{
// Enumerate.
hr = pEnum->Next(1, &var, &lFetch);
if (SUCCEEDED(hr))
{
while (SUCCEEDED(hr))
{
if (lFetch == 1)
{
pDisp = V_DISPATCH(&var);
hre = pDisp->QueryInterface(
IID_IADsObjectOptions,
(void**)&pOpt);
if (pDisp)
pDisp->Release();
}
VariantClear(&var);
hr = pEnum->Next(1, &var, &lFetch);
}
// S_FALSE indicates that the row was read properly.
if (hr == S_FALSE)
hr = hre;
}
if (SUCCEEDED(hr))
{
// There is a valid pOpt, so request the server name.
VariantInit(vGCServer);
hr = pOpt->GetOption(ADS_OPTION_SERVERNAME,vGCServer);
}
}
}
// Cleanup.
VariantClear(&var);
if (pOpt)
pOpt->Release();
if (pEnum)
pEnum->Release();
if (pUnk)
pUnk->Release();
if (pContainer)
pContainer->Release();
return (hr);
}