绑定到用户容器的示例代码
以下 C++ 代码示例将绑定到当前域中的用户容器,并返回容器的 IADsContainer 接口。 有关绑定到已知对象的详细信息,请参阅使用 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;
}