Beispielcode für die Bindung an den Container des Benutzers
Das folgende C++-Codebeispiel bindet an den Benutzercontainer in der aktuellen Domäne und gibt die IADsContainer-Schnittstelle für den Container zurück. Weitere Informationen zum Binden an bekannte Objekte finden Sie unter Binden an Well-Known-Objekte mithilfe von WKGUID.
//**********************************************************
//
// GetUsersContainer()
//
// Binds to the well-known Users container in the current domain
// with the current user credentials. GUID_USERS_CONTAINER_W is
// defined in NTDSAPI.H.
//
//*******************************************************************
HRESULT GetUsersContainer(IADsContainer **ppContainer)
{
if(NULL == ppContainer)
{
return E_INVALIDARG;
}
HRESULT hr;
IADs *pRoot;
*ppContainer = NULL;
// Bind to the rootDSE object.
hr = ADsOpenObject(L"LDAP://rootDSE",
NULL,
NULL,
ADS_SECURE_AUTHENTICATION,
IID_IADs,
(LPVOID*)&pRoot);
if(SUCCEEDED(hr))
{
VARIANT var;
VariantInit(&var);
// Get the current domain DN.
hr = pRoot->Get(CComBSTR("defaultNamingContext"), &var);
if(SUCCEEDED(hr))
{
// Build the binding string.
LPWSTR pwszFormat = L"LDAP://<WKGUID=%s,%s>";
LPWSTR pwszPath;
pwszPath = new WCHAR[wcslen(pwszFormat) +
wcslen(GUID_USERS_CONTAINER_W) +
wcslen(var.bstrVal)];
if(NULL != pwszPath)
{
swprintf_s(pwszPath,
pwszFormat,
GUID_USERS_CONTAINER_W,
var.bstrVal);
// Bind to the object.
hr = ADsOpenObject(pwszPath,
NULL,
NULL,
ADS_SECURE_AUTHENTICATION,
IID_IADsContainer,
(LPVOID*)ppContainer);
delete pwszPath;
}
else
{
hr = E_OUTOFMEMORY;
}
VariantClear(&var);
}
pRoot->Release();
}
return hr;
}