ADSI
От: moon  
Дата: 24.03.05 13:54
Оценка:
Нужно написать программное управление(создание сайтов, виртуальных директорий) IIS. Как я понял это можно сделать с помощью ADSI. Только вот все примеры, которые я нашел написаны на скриптах(VBScript, JScript). Каким образом можно переделать эти скрипты в сишный код или просто писать на С, используя ADSI?
Помогите, очень нужно!
Re: ADSI
От: LioLick  
Дата: 24.03.05 13:57
Оценка:
Здравствуйте, moon, Вы писали:

M>Нужно написать программное управление(создание сайтов, виртуальных директорий) IIS. Как я понял это можно сделать с помощью ADSI. Только вот все примеры, которые я нашел написаны на скриптах(VBScript, JScript). Каким образом можно переделать эти скрипты в сишный код или просто писать на С, используя ADSI?

M>Помогите, очень нужно!

http://www.rsdn.ru/Forum/Message.aspx?mid=1062083&only=1
Автор: LioLick
Дата: 09.03.05
GL!
Re[2]: ADSI
От: moon  
Дата: 24.03.05 14:08
Оценка:
Здравствуйте, LioLick, Вы писали:

LL>http://www.rsdn.ru/Forum/Message.aspx?mid=1062083&only=1
Автор: LioLick
Дата: 09.03.05


Да, я помню этот пример. Но он использует чисто COM, а мне нужно ADSI.
Re[3]: ADSI
От: LioLick  
Дата: 24.03.05 14:17
Оценка:
Здравствуйте, moon, Вы писали:

M>Да, я помню этот пример. Но он использует чисто COM, а мне нужно ADSI.

В InnoSetup еще есть.
Там скрипт а-ля Дельфи.
Там, по моему как раз ADSI используется
GL!
Re: ADSI
От: __zve Россия  
Дата: 24.03.05 14:56
Оценка:
Здравствуйте, moon, Вы писали:

M>Нужно написать программное управление(создание сайтов, виртуальных директорий) IIS. Как я понял это можно сделать с помощью ADSI. Только вот все примеры, которые я нашел написаны на скриптах(VBScript, JScript). Каким образом можно переделать эти скрипты в сишный код или просто писать на С, используя ADSI?

M>Помогите, очень нужно!

Вот небольшой пример (VC 7.1):

// ADSITest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <comdef.h>
#include <activeds.h>

_COM_SMARTPTR_TYPEDEF(IADs, IID_IADs);

int _tmain(int argc, _TCHAR* argv[])
{

CoInitialize(0);
try
{
_tprintf(_T("Updating default web site ...\n"));

IADsPtr pObj = NULL;
HRESULT hr = ADsOpenObject(L"IIS://localhost/W3SVC/1/ROOT",NULL,NULL,0,IID_IADs,(void**)&pObj);
if(FAILED(hr))
{
_tprintf(_T("Error: hr = 0x%x\n"),hr);
}

_tprintf(_T("Getting DefaultDoc ...\n"),hr);

_variant_t defDoc;
hr = pObj->Get(_bstr_t("DefaultDoc"), &defDoc);
if(FAILED(hr))
{
_tprintf(_T("Error: hr = 0x%x\n"),hr);
}

_bstr_t bsDefDoc = (_bstr_t)defDoc;
_tprintf(_T("DefaultDoc = %s\n"),(LPCTSTR)bsDefDoc);

_tprintf(_T("Adding document ...\n"));
bsDefDoc += L",MySuperDocument.htm";
hr = pObj->Put(_bstr_t("DefaultDoc"), _variant_t(bsDefDoc));
if(FAILED(hr))
{
_tprintf(_T("Error: hr = 0x%x\n"),hr);
}

_tprintf(_T("Finishing transaction ...\n"));
hr = pObj->SetInfo();
if(FAILED(hr))
{
_tprintf(_T("Error: hr = 0x%x\n"),hr);
}

}
catch(_com_error& e)
{
_tprintf(_T("Error: hr = 0x%x"),e.Error());
}
CoUninitialize();

return 0;
}
Re[2]: ADSI
От: moon  
Дата: 24.03.05 15:18
Оценка:
Здравствуйте, __zve, Вы писали:

___>Вот небольшой пример (VC 7.1):


Жаль, что не на VC 6.0, т.к. именно ее я использую. В VC 7 все по-другому((
Re[3]: ADSI
От: __zve Россия  
Дата: 24.03.05 15:31
Оценка:
Здравствуйте, moon, Вы писали:

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


___>>Вот небольшой пример (VC 7.1):


M> Жаль, что не на VC 6.0, т.к. именно ее я использую. В VC 7 все по-другому((


// ADSITestVC6.cpp : Defines the entry point for the console application.
//


Вот это я скомпилировал и запустил на VC 6.0:
BTW: Чтобы собралось надо добавить в Project->Settings->Link->Object Library/Modules
дополнительно две либы: adsiid.lib activeds.lib

#include "stdafx.h"

#include <comdef.h>
#include <activeds.h>

#include <tchar.h>

_COM_SMARTPTR_TYPEDEF(IADs, IID_IADs);

int main(int argc, char* argv[])
{
CoInitialize(0);
try
{
_tprintf(_T("Updating default web site ...\n"));

IADsPtr pObj = NULL;
HRESULT hr = ADsOpenObject(L"IIS://localhost/W3SVC/1/ROOT",NULL,NULL,0,IID_IADs,(void**)&pObj);
if(FAILED(hr))
{
_tprintf(_T("Error: hr = 0x%x\n"),hr);
}

_tprintf(_T("Getting DefaultDoc ...\n"),hr);

_variant_t defDoc;
hr = pObj->Get(_bstr_t("DefaultDoc"), &defDoc);
if(FAILED(hr))
{
_tprintf(_T("Error: hr = 0x%x\n"),hr);
}

_bstr_t bsDefDoc = (_bstr_t)defDoc;
_tprintf(_T("DefaultDoc = %s\n"),(LPCTSTR)bsDefDoc);

_tprintf(_T("Adding document ...\n"));
bsDefDoc += L",MySuperDocument.htm";
hr = pObj->Put(_bstr_t("DefaultDoc"), _variant_t(bsDefDoc));
if(FAILED(hr))
{
_tprintf(_T("Error: hr = 0x%x\n"),hr);
}

_tprintf(_T("Finishing transaction ...\n"));
hr = pObj->SetInfo();
if(FAILED(hr))
{
_tprintf(_T("Error: hr = 0x%x\n"),hr);
}

}
catch(_com_error& e)
{
_tprintf(_T("Error: hr = 0x%x"),e.Error());
}
CoUninitialize();

return 0;
}
Re[4]: ADSI
От: moon  
Дата: 24.03.05 15:48
Оценка:
Здравствуйте, __zve, Вы писали:

__>Вот это я скомпилировал и запустил на VC 6.0:


Да, работает... а есть еще подобные примеры?
Re[5]: ADSI
От: __zve Россия  
Дата: 24.03.05 16:18
Оценка:
Здравствуйте, moon, Вы писали:

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


__>>Вот это я скомпилировал и запустил на VC 6.0:


M>Да, работает... а есть еще подобные примеры?


А какие конкретно действия через ADSI Вас интересуют?
Дело в том что я написал этот пример не зная что Вы собственно собираетесь делать.

С ADSI для IIS — а все просто, В нем сайты и виртуальные директории лежат в виде дерева.
У каждого элемента дерева есть тип (objectClass) и набор аттрибутов.

Для доступа к элементу дерева служит интерфейс IADs
при помощи него можно менять значения аттрибутов.

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

Для создания/удаления/перчисления дочерних элементов используется интерфейс IADsContainer
который можно получить у обьекта IADs через QueryInterface.

Описание элементов и их аттрибутов должно лежать в где-то в MSDN
в принципе Вы сами можете посмотреть на это дерево используюя программу ADsVw.exe. Она должна поставляться с Platform SDK.
Re[6]: ADSI
От: moon  
Дата: 24.03.05 16:48
Оценка:
Здравствуйте, __zve, Вы писали:

__>А какие конкретно действия через ADSI Вас интересуют?


Мне нужно создать FTP сайт и несколько виртуальных директорий в нем. Также, помимо IIS, хотелось бы создать парочку пользоваетлей и групп на серваке... что-то похожее я нашел в msdn, но дело в том, что там работа осуществляется с доменом, а мне нужна рабочая группа... Собственно, в этом состоит еще одна проблема: мне нужно определить, доменная структура или групповая и далее уже кодить соответственно. У Вас есть какие-то соображения на эту тему?
Re[7]: ADSI
От: __zve Россия  
Дата: 24.03.05 17:37
Оценка: 2 (1)
Здравствуйте, moon, Вы писали:

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


__>>А какие конкретно действия через ADSI Вас интересуют?


M>Мне нужно создать FTP сайт и несколько виртуальных директорий в нем. Также, помимо IIS, хотелось бы создать парочку пользоваетлей и групп на серваке... что-то похожее я нашел в msdn, но дело в том, что там работа осуществляется с доменом, а мне нужна рабочая группа... Собственно, в этом состоит еще одна проблема: мне нужно определить, доменная структура или групповая и далее уже кодить соответственно. У Вас есть какие-то соображения на эту тему?




Создавать пользователей в рабочей группе тоже можно через ADSI.
Для этого используеся так называемый WinNT провайдер.

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

По поводу FTP

1. В цикле пытаетесь открыть через ADsOpenObject
IIS://localhost/MSFTPSVC/1
IIS://localhost/MSFTPSVC/2
IIS://localhost/MSFTPSVC/3
.....


Пока оно не выдаст ошибку
После этого открываете
IIS://localhost/MSFTPSVC

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

в нем создаете обьект с именем ROOT и типом IIsFtpVirtualDir
После этого у вас готов FTP сайт

далее создаете там обьекты типа IIsFtpVirtualDir
это и будут ваши виртуальные директории.
Re[8]: ADSI
От: moon  
Дата: 28.03.05 14:28
Оценка:
Здравствуйте, __zve, Вы писали:

__>Создавать пользователей в рабочей группе тоже можно через ADSI.

__>Для этого используеся так называемый WinNT провайдер.

Спасибо за помощь! Правда возникли еще некоторые проблемы... Теперь мне не удается поменять аттрибуты пользователя, которого я создаю, в рабочей группе.
Re[8]: ADSI
От: moon  
Дата: 28.03.05 14:33
Оценка:
Вопрос теперь в том, как мне править свойства пользователя. Есть подозрения, что этого не позволяет делать WinNT provider. У Вас есть какие-лиюо идеи?
Заранее благодарен!
Re[9]: ADSI
От: __zve Россия  
Дата: 28.03.05 17:10
Оценка:
Здравствуйте, moon, Вы писали:

M> Вопрос теперь в том, как мне править свойства пользователя. Есть подозрения, что этого не позволяет делать WinNT provider. У Вас есть какие-лиюо идеи?

M>Заранее благодарен!

Какие конкретно атрибуты вас интересуют?
Какую ошибку возвращает ADSI?
Re[10]: ADSI
От: moon  
Дата: 31.03.05 14:15
Оценка:
Здравствуйте, __zve, Вы писали:

__>Какие конкретно атрибуты вас интересуют?

__>Какую ошибку возвращает ADSI?

С той проблемой я кое-как разобрался... Теперь появилась другая: как определить доменная или групповая структура у локалки? В приниципе, можно просто прверять при доступе к объектам, вернул ли ошибку метод или нет... и далее использовать др. провайдер, но хотелось бы нормальное решение этой задачи.
Re[11]: ADSI
От: __zve Россия  
Дата: 01.04.05 09:29
Оценка: 3 (1)
Здравствуйте, moon, Вы писали:

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


__>>Какие конкретно атрибуты вас интересуют?

__>>Какую ошибку возвращает ADSI?

M> С той проблемой я кое-как разобрался... Теперь появилась другая: как определить доменная или групповая структура у локалки? В приниципе, можно просто прверять при доступе к объектам, вернул ли ошибку метод или нет... и далее использовать др. провайдер, но хотелось бы нормальное решение этой задачи.



Вот, может помочь.
http://support.microsoft.com/default.aspx?scid=kb;en-us;179891
Re[12]: ADSI
От: moon  
Дата: 01.04.05 14:11
Оценка:
Здравствуйте, __zve, Вы писали:

__>Вот, может помочь.

__>http://support.microsoft.com/default.aspx?scid=kb;en-us;179891

Спасибо, разбираемся...
Еще тут возник вопросец
Нужно создать пользователя и группу на локальной машине с AD. Т.е проблема в том, что надо получить dn контейнера users(при этом до этого получив домен, имя компа и т.д. для adspath) и groups. Это я не знаю как сделать... ТОчнее знаю, но не уверен, что правильно(я делаю это через rootDSE, получая configurationNamingContext) Дальше возникаю проблемы: к какому контейнеру обращаться при создании групп и пользователей и где находятся польз "Адмнистратор" и его группа и т.д.
Заранеее спасибо!!!
Re[13]: ADSI
От: __zve Россия  
Дата: 01.04.05 18:09
Оценка: 3 (1)
Здравствуйте, moon, Вы писали:

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


__>>Вот, может помочь.

__>>http://support.microsoft.com/default.aspx?scid=kb;en-us;179891

M>Спасибо, разбираемся...

M>Еще тут возник вопросец
M>Нужно создать пользователя и группу на локальной машине с AD. Т.е проблема в том, что надо получить dn контейнера users(при этом до этого получив домен, имя компа и т.д. для adspath) и groups. Это я не знаю как сделать... ТОчнее знаю, но не уверен, что правильно(я делаю это через rootDSE, получая configurationNamingContext) Дальше возникаю проблемы: к какому контейнеру обращаться при создании групп и пользователей и где находятся польз "Адмнистратор" и его группа и т.д.
M> Заранеее спасибо!!!

Правильный способ обращения к подобным контейнерам описа здесь:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ad/ad/binding_to_well-known_objects_using_wkguid.asp
В частности к контейнеру "Users"

Администратор обычно находится в контейнере Users группа "Administrators" в контейнете Builin
Domain Admins в "Users" Но суть в том что эти пользоваетли или группы могут быть легко перенесены администратором куда угодно.

Я думаю вам либо надо давать пользователям выбирать самим где создать Ваши обьекты при помощи функции DSBrowseForContainer или
всегда создавать в "Users"
Re[14]: ADSI
От: moon  
Дата: 04.04.05 11:24
Оценка:
Здравствуйте, __zve, Вы писали:

__>Администратор обычно находится в контейнере Users группа "Administrators" в контейнете Builin

__>Domain Admins в "Users" Но суть в том что эти пользоваетли или группы могут быть легко перенесены администратором куда угодно.

__>Я думаю вам либо надо давать пользователям выбирать самим где создать Ваши обьекты при помощи функции DSBrowseForContainer или

__>всегда создавать в "Users"

Да, своих пользователей и группы я буду создавать в заранее определенном контейнере(Users). Просто мне нужно также добавлять своего пользователя к группе "Administrators", а в свою группу вносить пользователя "Administrator". Т.к. они (обьекты) могут быть перемещены куда-угодно, то тогда должна быть какая-то функция или const, определяющая путь к ним(что-то типа wellknownobjects). Вы случайно ее не знаете?
Re[15]: ADSI
От: __zve Россия  
Дата: 04.04.05 12:40
Оценка:
Здравствуйте, moon, Вы писали:

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


__>>Администратор обычно находится в контейнере Users группа "Administrators" в контейнете Builin

__>>Domain Admins в "Users" Но суть в том что эти пользоваетли или группы могут быть легко перенесены администратором куда угодно.

__>>Я думаю вам либо надо давать пользователям выбирать самим где создать Ваши обьекты при помощи функции DSBrowseForContainer или

__>>всегда создавать в "Users"

M> Да, своих пользователей и группы я буду создавать в заранее определенном контейнере(Users). Просто мне нужно также добавлять своего пользователя к группе "Administrators", а в свою группу вносить пользователя "Administrator". Т.к. они (обьекты) могут быть перемещены куда-угодно, то тогда должна быть какая-то функция или const, определяющая путь к ним(что-то типа wellknownobjects). Вы случайно ее не знаете?


Насколько я помню обьект 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 Администратора, по моему, зависит от домена но его тоже можно сконструировать используя сид этого самого домена.
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...
Пока на собственное сообщение не было ответов, его можно удалить.