Настройка безопасности сервера во время регистрации
От: egoroff  
Дата: 05.03.03 09:54
Оценка:
Дорогие Коллеги!!!

Здравствуйте!

Будте добры подсказать, каким образом я мог бы указать пользовательские разрешения доступа и запуска для своего сервера, не используя dcomcnfg, а непосредственно из программы при запуске сервера с параметром "-regserver"?

Заранее благодарен
Егорофф
Re: Настройка безопасности сервера во время регистрации
От: Vi2 Удмуртия http://www.adem.ru
Дата: 05.03.03 12:30
Оценка:
Здравствуйте, egoroff, Вы писали:

E>Будте добры подсказать, каким образом я мог бы указать пользовательские разрешения доступа и запуска для своего сервера, не используя dcomcnfg, а непосредственно из программы при запуске сервера с параметром "-regserver"?

В принципе, dcomcnfg пишет информацию по вполне известному адресу в Реестре, а именно в одном подключе в разделе HKCR\AppID, соответствующему AppID твоего приложения. Поэтому почему бы и нет?! Если у тебя есть какой-нибудь rgs-файл, в котором приложение пишет свою информацию в Реестр, и ты сможешь через него записать всю нужную информацию вместо dcomcnfg, то тем самым необходимость вызова dcomcnfg отпадает.

Например, если rec.rgs файл для приложения Rec.EXE, который формируется по умолчанию таким:
HKCR
{
    NoRemove AppID
    {
        {610B38D4-577F-11D6-A449-004095426E66} = s 'Rec'
        'Rec.EXE'
        {
            val AppID = s {610B38D4-577F-11D6-A449-004095426E66}
        }
    }
}

изменить на
HKCR
{
    NoRemove AppID
    {
        {610B38D4-577F-11D6-A449-004095426E66} = s 'Rec'
        {
            val RunAs = s 'Interactive User'
        }
        'Rec.EXE'
        {
            val AppID = s {610B38D4-577F-11D6-A449-004095426E66}
        }
    }
}

то получим запуск под интерактивным пользователем. И т.д.
Какие ключи использует dcomcnfg для регистрации, можно посмотреть после пробного использования dcomcnfg на своем приложении.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: Настройка безопасности сервера во время регистрации
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 05.03.03 13:41
Оценка:
Здравствуйте, Vi2, Вы писали:

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


[]

Это все прекрасно, но человеку нужно настроить безопасность, а это значения LaunchPermission и AccessPermission.
Они представляют собой обыкновенные sd (security descriptors) в относительном формате. Работать с этим форматом можно с помощью функций MakeSelfRelativeSD и MakeAbsoluteSD.
Когда-то давно я писал тулзу по настройке всего этого хозяйства, но так и не дописал. Однако кое-что получилось:

void DumpKey(PCTSTR key_name)
{
    CRegKey key;
    if (key.Open(HKEY_CLASSES_ROOT,key_name) == ERROR_SUCCESS){
        DWORD type_key = REG_BINARY;
        PBYTE pbuf = (PBYTE)_alloca(1000);
        DWORD len = 1000;
        if (RegQueryValueEx(key,_T("AccessPermission"),0,
            &type_key,pbuf,&len) == ERROR_SUCCESS){
            if (type_key == REG_BINARY){
                security::CPrivateSD sd;
                sd.LoadFromSelfRelative(pbuf);
                cout << sd;
            }
        }
    }
}
...
DumpKey(_T("AppID\\{ххх}"));


Могу объяснить поподробнее работу классов. Может (если покапаюсь серьезно) собрать классы воедино и выложить в инет.
Re[3]: Настройка безопасности сервера во время регистрации
От: egoroff  
Дата: 11.03.03 12:38
Оценка:
Здравствуйте, Alexey Shirshov!

Огромное спасибо! Думаю, MakeSelfRelativeSD и MakeAbsoluteSD — то, что надо.

AS>Могу объяснить поподробнее работу классов. Может (если покапаюсь серьезно) собрать классы воедино и выложить в инет.


Если это тебя не напряжет, буду крайне признателен!
Re[4]: Настройка безопасности сервера во время регистрации
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 11.03.03 13:36
Оценка:
Здравствуйте, egoroff, Вы писали:

[]

E>Если это тебя не напряжет, буду крайне признателен!


Вообще-то Ivan тут недавно говорил про пример из SDK (dcomperm) — посмотри.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.