Directory Services |
The following code example shows a function that will bind to the users container in the current domain and return and IADsContainer interface for the container. For more information about binding to well-known objects, see Binding to Well-Known Objects Using WKGUID.
//*************************************************************************** // // GetUsersContainer() // // Binds to the well known Users container in the current domain with the // current user's 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(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; }