Re[16]: ADSI
От: moon  
Дата: 04.04.05 12:59
Оценка:
Здравствуйте, __zve, Вы писали:

__>Насколько я помню обьект Administrators имеет welll-known SID не зависящий от домена:

__>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/well_known_sids.asp

__>и соответственно к нему можно прибиндиться при помощи метода описанного здесь:

__>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ad/ad/binding_to_an_object_using_a_sid.asp

__>SID Администратора, по моему, зависит от домена но его тоже можно сконструировать используя сид этого самого домена.


да, но тут возникла такая проблема: а если язык операционной системы(установленный) отличается от английского, то нужно будет изменять все строки доступа(adspath и др.). Т.е. каким образом Вы обычно решаете пролему интернализации приложений(в частности получения текущего установленного языка)?
Re[17]: ADSI
От: __zve Россия  
Дата: 04.04.05 13:12
Оценка:
Здравствуйте, moon, Вы писали:

M>Здравствуйте, __zve, Вы писали:


__>>Насколько я помню обьект Administrators имеет welll-known SID не зависящий от домена:

__>>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/well_known_sids.asp

__>>и соответственно к нему можно прибиндиться при помощи метода описанного здесь:

__>>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ad/ad/binding_to_an_object_using_a_sid.asp

__>>SID Администратора, по моему, зависит от домена но его тоже можно сконструировать используя сид этого самого домена.


M> да, но тут возникла такая проблема: а если язык операционной системы(установленный) отличается от английского, то нужно будет изменять все строки доступа(adspath и др.). Т.е. каким образом Вы обычно решаете пролему интернализации приложений(в частности получения текущего установленного языка)?


Это как раз е есть правильное решение проблемы с языками — использовать сиды и wellknown guids потому-что они инвариантна к по отношения к языку операционной системы.
Re[18]: ADSI
От: moon  
Дата: 04.04.05 13:27
Оценка:
Здравствуйте, __zve, Вы писали:

__>Это как раз е есть правильное решение проблемы с языками — использовать сиды и wellknown guids потому-что они инвариантна к по отношения к языку операционной системы.


Это для уже заранее установленных системой объектов, а для объектов, создаваемых позже(в частности мной) это не совем подходит. Т.е. я должен знать создавать "Вася" или "Vasya".
И еще вопрос: я не совсем разобрался с sid ... это подходит для работы с workgroup или только с доменом?
Спасибо за ответы!!!
Re[19]: ADSI
От: __zve Россия  
Дата: 04.04.05 13:52
Оценка: 3 (1)
Здравствуйте, moon, Вы писали:

M>Здравствуйте, __zve, Вы писали:


__>>Это как раз е есть правильное решение проблемы с языками — использовать сиды и wellknown guids потому-что они инвариантна к по отношения к языку операционной системы.


M> Это для уже заранее установленных системой объектов, а для объектов, создаваемых позже(в частности мной) это не совем подходит. Т.е. я должен знать создавать "Вася" или "Vasya".


Мне кажется тут язык операционки Вам мало поможет,
Как Вы например напишете "Вася" на японском?
Тут правильно либо давать пользователям самим определять названия этих обьектов
либо делать версии соотвествующии поддерживаемым языкам.

M> И еще вопрос: я не совсем разобрался с sid ... это подходит для работы с workgroup или только с доменом?

M> Спасибо за ответы!!!

Присланные мною ссылки относятся только к Active Directory.
Но для локальных пользователей и WinNT провайдера SID тоже применим, там просто несколько более сложный алгоритм.

Например чтобы найти группу "Administrators" вы должны открыть сервер как IADsContainer и начать перебирать в нем все группы.
Брать у каждой из них аттрибут objectSID (это массив байт) и сравнивать с Well known SID для группы локальных администраторов.
x01 x02 x00 x00 x00 x00 x00 x05 x20 x00 x00 x00 x20 x02 x00 x00

Группа у которой сид совпадает с этим и есть Администраторы.
Re[20]: ADSI
От: moon  
Дата: 06.04.05 11:34
Оценка:
Здравствуйте, __zve, Вы писали:

__>Мне кажется тут язык операционки Вам мало поможет,

__>Как Вы например напишете "Вася" на японском?
__>Тут правильно либо давать пользователям самим определять названия этих обьектов
__>либо делать версии соотвествующии поддерживаемым языкам.

Так, собственно, вопрос в том и состоит, как определить установленный(текущий) язык операционной системы.

__>Присланные мною ссылки относятся только к Active Directory.

__>Но для локальных пользователей и WinNT провайдера SID тоже применим, там просто несколько более сложный алгоритм.

При работе с рабочими группами можно ведь, вообще, не использовать sid, т.к. там достаточно знать имя машины и все... мы ведь обращаемся напрямую к определенному пользователю или группе: "WinNT://<computer name/"Administrtors">" и др. Или я не прав?

__>Например чтобы найти группу "Administrators" вы должны открыть сервер как IADsContainer и начать перебирать в нем все группы.

__>Брать у каждой из них аттрибут objectSID (это массив байт) и сравнивать с Well known SID для группы локальных администраторов.
__>x01 x02 x00 x00 x00 x00 x00 x05 x20 x00 x00 x00 x20 x02 x00 x00

__>Группа у которой сид совпадает с этим и есть Администраторы.


Это, как я понимаю, для AD...
Re[21]: ADSI
От: __zve Россия  
Дата: 06.04.05 12:56
Оценка:
Здравствуйте, moon, Вы писали:

M>Здравствуйте, __zve, Вы писали:


__>>Мне кажется тут язык операционки Вам мало поможет,

__>>Как Вы например напишете "Вася" на японском?
__>>Тут правильно либо давать пользователям самим определять названия этих обьектов
__>>либо делать версии соотвествующии поддерживаемым языкам.

M>Так, собственно, вопрос в том и состоит, как определить установленный(текущий) язык операционной системы.



__>>Присланные мною ссылки относятся только к Active Directory.

__>>Но для локальных пользователей и WinNT провайдера SID тоже применим, там просто несколько более сложный алгоритм.

M>При работе с рабочими группами можно ведь, вообще, не использовать sid, т.к. там достаточно знать имя машины и все... мы ведь обращаемся напрямую к определенному пользователю или группе: "WinNT://<computer name/"Administrtors">" и др. Или я не прав?


Проблема может быть в том что скажем на немецком сервере вместо слова "Administrators" может быть тоже самое но по немецки
.
__>>Например чтобы найти группу "Administrators" вы должны открыть сервер как IADsContainer и начать перебирать в нем все группы.
__>>Брать у каждой из них аттрибут objectSID (это массив байт) и сравнивать с Well known SID для группы локальных администраторов.
__>>x01 x02 x00 x00 x00 x00 x00 x05 x20 x00 x00 x00 x20 x02 x00 x00

__>>Группа у которой сид совпадает с этим и есть Администраторы.


M>Это, как я понимаю, для AD...


Нет это как раз относилось к WorkGroup-ам
Re[22]: ADSI
От: moon  
Дата: 06.04.05 13:47
Оценка:
Здравствуйте, __zve, Вы писали:

__>Проблема может быть в том что скажем на немецком сервере вместо слова "Administrators" может быть тоже самое но по немецки

__>.

А как можно определить язык ОС?

__>Нет это как раз относилось к WorkGroup-ам


Так в рабочей группе мы точно знаем, где находится пользователь "Администратор"(в папки пользователи) и знаем как к нему обратиться... вот в домене пользователя можно повесить куда угодно... Собстно, это(поиск по sid) разве нужно делать?

А есть большая разница между использованием rid опредляющих локальный и глобальные группы(т.е. локальные включают глобальные и может быть их лучше всегда пользовать)?
Re[23]: ADSI
От: __zve Россия  
Дата: 06.04.05 14:59
Оценка:
Здравствуйте, moon, Вы писали:

M>Здравствуйте, __zve, Вы писали:


__>>Проблема может быть в том что скажем на немецком сервере вместо слова "Administrators" может быть тоже самое но по немецки

__>>.

M> А как можно определить язык ОС?


Приведенный мной способ поиска по сидам какраз и позволяет искать администраторов не зная язык операционки.

__>>Нет это как раз относилось к WorkGroup-ам


M> Так в рабочей группе мы точно знаем, где находится пользователь "Администратор"(в папки пользователи) и знаем как к нему обратиться... вот в домене пользователя можно повесить куда угодно... Собстно, это(поиск по sid) разве нужно делать?


см ответ выше, путь : WinNT://yourServer/Administrator может не проканать на немецом сервере.


M> А есть большая разница между использованием rid опредляющих локальный и глобальные группы(т.е. локальные включают глобальные и может быть их лучше всегда пользовать)?


Не очень понял вопрос?
Выбор между локальными и глобальными группами опрределяется административными задачами которые решаются
обычно локальные круппы создают для организации доступа к рескрсам на различных серверах а гдобальные для обрединения реальных людей в различные группы.
Re[8]: ADSI
От: moon  
Дата: 13.04.05 13:19
Оценка:
Здравствуйте, __zve, Вы писали:

__>По поводу FTP


__>1. В цикле пытаетесь открыть через ADsOpenObject

__>IIS://localhost/MSFTPSVC/1
__>IIS://localhost/MSFTPSVC/2
__>IIS://localhost/MSFTPSVC/3
__>.....


__>Пока оно не выдаст ошибку

__> После этого открываете
__>IIS://localhost/MSFTPSVC

__>и создаете в нем обьект с именем с соответствующей цифрой

__>и типом IIsFtpServer

__>в нем создаете обьект с именем ROOT и типом IIsFtpVirtualDir

__>После этого у вас готов FTP сайт

__>далее создаете там обьекты типа IIsFtpVirtualDir

__>это и будут ваши виртуальные директории.


Опять появлись некоторые вопросы)
При выполнениии следующего кода у меня почему-то не создается FTP сайт...



  HRESULT hr = S_OK;
  IADsContainer *pCont, *pContRoot;
  IDispatch *pDisp=NULL, *pDispVD = NULL;
  int i;
  IADs *pObj;

  CoInitialize(NULL);
  
  hr = ADsOpenObject(L"IIS://localhost/MSFTPSVC",NULL,NULL,0,IID_IADs,(void**)&pObj);
     if ( !SUCCEEDED(hr) ){ return 0;}
  
  pObj->QueryInterface(IID_IADsContainer, (void**)&pCont); 
     if ( !SUCCEEDED(hr) ){ return 0;}

  hr = pCont->Create(L"IIsFTPServer", L"3", &pDisp);
    if ( !SUCCEEDED(hr) ){ return 0;}

  pObj->SetInfo(); 

  hr = pDisp->QueryInterface(IID_IADsContainer, (void**)&pContRoot);
  if ( !SUCCEEDED(hr) ){ return 0;}

  pContRoot->Create(L"IIsFtpVirtualDir", L"ROOT", &pDispVD);

  pObj->SetInfo(); 
  
  pObj->Release();
  pContRoot->Release();
  pDispVD->Release();
  pCont->Release();
  pDisp->Release();

  CoUninitialize();


У Вас есть какие-нибудь предположения?
Заранее спасибо!
Re[9]: ADSI
От: __zve Россия  
Дата: 13.04.05 17:59
Оценка: 3 (1)
Здравствуйте, moon, Вы писали:

M>Здравствуйте, __zve, Вы писали:


__>>По поводу FTP


__>>1. В цикле пытаетесь открыть через ADsOpenObject

__>>IIS://localhost/MSFTPSVC/1
__>>IIS://localhost/MSFTPSVC/2
__>>IIS://localhost/MSFTPSVC/3
__>>.....


__>>Пока оно не выдаст ошибку

__>> После этого открываете
__>>IIS://localhost/MSFTPSVC

__>>и создаете в нем обьект с именем с соответствующей цифрой

__>>и типом IIsFtpServer

__>>в нем создаете обьект с именем ROOT и типом IIsFtpVirtualDir

__>>После этого у вас готов FTP сайт

__>>далее создаете там обьекты типа IIsFtpVirtualDir

__>>это и будут ваши виртуальные директории.


M>Опять появлись некоторые вопросы)

M>При выполнениии следующего кода у меня почему-то не создается FTP сайт...



M>
M>  HRESULT hr = S_OK;
M>  IADsContainer *pCont, *pContRoot;
M>  IDispatch *pDisp=NULL, *pDispVD = NULL;
M>  int i;
M>  IADs *pObj;

M>  CoInitialize(NULL);
  
M>  hr = ADsOpenObject(L"IIS://localhost/MSFTPSVC",NULL,NULL,0,IID_IADs,(void**)&pObj);
M>     if ( !SUCCEEDED(hr) ){ return 0;}
  
  pObj->>QueryInterface(IID_IADsContainer, (void**)&pCont); 
M>     if ( !SUCCEEDED(hr) ){ return 0;}

M>  hr = pCont->Create(L"IIsFTPServer", L"3", &pDisp);
M>    if ( !SUCCEEDED(hr) ){ return 0;}

  pObj->>SetInfo(); 

M>  hr = pDisp->QueryInterface(IID_IADsContainer, (void**)&pContRoot);
M>  if ( !SUCCEEDED(hr) ){ return 0;}

M>  pContRoot->Create(L"IIsFtpVirtualDir", L"ROOT", &pDispVD);

  pObj->>SetInfo(); 
  
  pObj->>Release();
M>  pContRoot->Release();
M>  pDispVD->Release();
M>  pCont->Release();
M>  pDisp->Release();

M>  CoUninitialize();
M>


M>У Вас есть какие-нибудь предположения?

M>Заранее спасибо!

Проблема в том что Вы должны вызывать SetInfo у обьекта который создаете а не его контейнера.
Ниже я привел изменение которое приводит к созданию FTP сайта.

M> HRESULT hr = S_OK;

M> IADsContainer *pCont, *pContRoot;
M> IDispatch *pDisp=NULL, *pDispVD = NULL;
M> int i;
<b>IADs *pObj,*pO1;</b>

M> CoInitialize(NULL);


M> hr = ADsOpenObject(L"IIS://localhost/MSFTPSVC",NULL,NULL,0,IID_IADs,(void**)&pObj);

M> if ( !SUCCEEDED(hr) ){ return 0;}

pObj->>QueryInterface(IID_IADsContainer, (void**)&pCont);

M> if ( !SUCCEEDED(hr) ){ return 0;}

M> hr = pCont->Create(L"IIsFTPServer", L"3", &pDisp);

M> if ( !SUCCEEDED(hr) ){ return 0;}

pObj->>SetInfo();


<b>
pDisp->QueryInterface(IID_IADs, (void**)&pO1);
if(!SUCCEEDED(hr) ){ return 0;}

hr = pO1->SetInfo();
if (!SUCCEEDED(hr)){ return 0;}
</b>

M> hr = pDisp->QueryInterface(IID_IADsContainer, (void**)&pContRoot);

M> if ( !SUCCEEDED(hr) ){ return 0;}

M> pContRoot->Create(L"IIsFtpVirtualDir", L"ROOT", &pDispVD);


pObj->>SetInfo();


pObj->>Release();

M> pContRoot->Release();
M> pDispVD->Release();
M> pCont->Release();
M> pDisp->Release();

M> CoUninitialize();

M>[/ccode]
Re[10]: ADSI
От: moon  
Дата: 14.04.05 14:15
Оценка:
Здравствуйте, __zve, Вы писали:



__>Проблема в том что Вы должны вызывать SetInfo у обьекта который создаете а не его контейнера.

__>Ниже я привел изменение которое приводит к созданию FTP сайта.

Я просто видел подобное изменение в каком-то примере и не думал, что он не подойдет для моего кода... Да, ваша версия верна... спасибо!
Re[6]: ADSI
От: Ngobo Россия  
Дата: 30.08.05 13:22
Оценка:
__>С ADSI для IIS — а все просто, В нем сайты и виртуальные директории лежат в виде дерева.
__>У каждого элемента дерева есть тип (objectClass) и набор аттрибутов.

__>Для доступа к элементу дерева служит интерфейс IADs

__>при помощи него можно менять значения аттрибутов.

__>Пример как это делать приведен в моей программе выше.


__>Для создания/удаления/перчисления дочерних элементов используется интерфейс IADsContainer

__>который можно получить у обьекта IADs через QueryInterface.

Добрый день!
В принципе все понятно, даже получилось поменять значения атрибутов. Я не могу понять одного, как вызвать метод у объекта, например
IIsFTPServer.Start ??
Покажите, пожалуйста, кто знает.
Маленький примерчик кода, где это делается и все
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.