Сейчас на форуме: zombi-vadim, tyns777 (+5 невидимых)

 eXeL@B —› Программирование —› создание пользователя в Active Directory
Посл.ответ Сообщение

Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 05 декабря 2007 14:38
· Личное сообщение · #1

В MSDN'e tcnm функция...
только вот ни как не могу с её помощью добавить пользователя

HRESULT TForm1::CreateUserFromADs(LPCWSTR pwszContainerDN,
LPCWSTR pwszName,
LPCWSTR pwszSAMAccountName,
LPCWSTR pwszInitialPassword)
{
HRESULT hr;
CComBSTR sbstrADsPath = "LDAP://";
sbstrADsPath += pwszContainerDN;
IADsContainer *pUsers = NULL;
hr = ADsGetObject(sbstrADsPath, IID_IADsContainer, (LPVOID*)&pUsers);
if(SUCCEEDED(hr))
{
IDispatch *pDisp = NULL;
CComBSTR sbstrName = "CN=";
sbstrName += pwszName;
hr = pUsers->Create(CComBSTR("user"), sbstrName, &pDisp);
if(SUCCEEDED(hr))
{
IADsUser *padsUser = NULL;
hr = pDisp->QueryInterface(IID_IADsUser, (void**) &padsUser);
if(SUCCEEDED(hr))
{
CComBSTR sbstrProp;
CComVariant svar;
svar = pwszSAMAccountName;
sbstrProp = "sAMAccountName";
hr = padsUser->Put(sbstrProp, svar);
hr = ADsOpenObject(sbstrADsPath, L"adm", L"admpass", ADS_SECURE_AUTHENTICATION, IID_IADsContainer, (LPVOID*)&pUsers);
hr = padsUser->SetInfo(); //ВОТ ТУТ hr = 0x80070005
hr = padsUser->SetPassword(CComBSTR(pwszInitialPassword));
sbstrProp = "pwdLastSet";
svar = 0;
hr = padsUser->Put(sbstrProp, svar);
svar.Clear();
sbstrProp = "userAccountControl";
hr = padsUser->Get(sbstrProp, &svar);
if(SUCCEEDED(hr))
{
svar = svar.lVal & ~(ADS_UF_ACCOUNTDISABLE |
ADS_UF_PASSWD_NOTREQD |
ADS_UF_DONT_EXPIRE_PASSWD);
hr = padsUser->Put(sbstrProp, svar);
hr = padsUser->SetInfo();
}
hr = padsUser->put_AccountDisabled(VARIANT_FALSE);
hr = padsUser->SetInfo();
padsUser->Release();
}pDisp->Release();
}pUsers->Release();
}return hr;
}

Может кто сталкивался ?



Ранг: 38.3 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 05 декабря 2007 16:45
· Личное сообщение · #2

0x80070005 - говорит что нет прав... Вообще никогда не заморачивался с этим делом на C++. Гораздо проще реализовать с помощью C#, VBS, JS.




Ранг: 95.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 05 декабря 2007 17:01
· Личное сообщение · #3

nv_xor пишет:
Гораздо проще реализовать с помощью C#, VBS, JS.

или на Дельфях, предварительно импортировав ActiveDs.tlb
а если не заморачиваццо, то на самом деле VBS и JS предоставляют широкие возможности для вот таких финтов ушами.

-----
бессмысленные манипуляции не становятся более разумными если их повторять




Ранг: 37.1 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 06 декабря 2007 04:52
· Личное сообщение · #4

1. Ты получаешь объект pUsers методом ADsGetObject.
2. Получаешь pUser из pUsers.
3. Получаешь pUsers методом ADsOpenObject (уже аутентифицируется).
4. Пытаешься сохранить изменения.

Все таки наверное надо в п1 использовать сразу ADsOpenObject, а п3 выкинуть...



Ранг: 34.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 06 декабря 2007 08:35
· Личное сообщение · #5

Всем спасибо!


 eXeL@B —› Программирование —› создание пользователя в Active Directory
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати