На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> Добавить пользователя в Launch and Activation Permissions , в свойствах COM объекта в DCOM Config
    Всем привет.

    Собственно - есть COM компонент, зарегистрированный в системе. Нужно добавить пользователя в Component Servicess->DCOM Config->[Component->Properties]->Security->Launch and Activation Permissions.
    На сколько я понял - сделать это можно с помощью ACL/DACL, но как именно что то не выходит. Еще можно юзать WMI, но тут есть проблема, нужно чтоб работало на Windows Server 2003 как минимум. А WMI поддерживается начиная с Win Server 2008.
    Я нашел пример устновки/снятия пользователя и прав через реестр. Но мне кажется как то это не совсем по феншую. Может есть какой нибудь другой способ? Уже 2 день курю MSDN, ниче толкового нет, одна вода и разговоры про абстрактных коней в вакууме.

    Спасибо.
    Сообщение отредактировано: KILLER -
      Цитата KILLER @
      Я нашел пример устновки/снятия пользователя и прав через реестр.

      Тоже такое нашел. Давно подозревал, что Венда несовершенна :lol:
      Найдешь решение годное - будет любопытно! Подпишусь на данную тему, пожалуй.
        Цитата JoeUser @
        Найдешь решение годное - будет любопытно! Подпишусь на данную тему, пожалуй.

        Годное решение есть, например юзать WMI, если использовать какой нибудь VBS или PowerShell то выходит 10 строчек:
        ExpandedWrap disabled
          $user = "sql2012agent"
          $domain = "MYDOMAIN"
          $appdesc = "Microsoft SQL Server Integration Services 11.0"
          $app = get-wmiobject -query ('SELECT * FROM Win32_DCOMApplicationSetting WHERE Description = "' + $appdesc + '"') -enableallprivileges
          #$appid = "{83B33982-693D-4824-B42E-7196AE61BB05}"
          #$app = get-wmiobject -query ('SELECT * FROM Win32_DCOMApplicationSetting WHERE AppId = "' + $appid + '"') -enableallprivileges
          $sdRes = $app.GetLaunchSecurityDescriptor()
          $sd = $sdRes.Descriptor
          $trustee = ([wmiclass] 'Win32_Trustee').CreateInstance()
          $trustee.Domain = $domain
          $trustee.Name = $user
          $fullControl = 31
          $localLaunchActivate = 11
          $ace = ([wmiclass] 'Win32_ACE').CreateInstance()
          $ace.AccessMask = $localLaunchActivate
          $ace.AceFlags = 0
          $ace.AceType = 0
          $ace.Trustee = $trustee
          [System.Management.ManagementBaseObject[]] $newDACL = $sd.DACL + @($ace)
          $sd.DACL = $newDACL
          $app.SetLaunchSecurityDescriptor($sd)

        Но я пилю инсталятор, и мне нужно поддерживать минимальную версию винды - Win Server 2003, а у WMI минимальные требования Vista/Win 2008 Server, и мне это решение не подходит.
        Еще я нашел пример из Win SDK, утилита dcomperm, но там ну очень много кода выходит + работа с реестром:
        https://github.com/Microsoft/Windows-classi...s/dcom/dcomperm

        Короче видимо придется мне всетаки выдирать нужный мне функционал из dcomperm, и работать с реестром, чем я собственно сейчас и занимаюсь :'(
        Сообщение отредактировано: KILLER -
          Цитата KILLER @
          Уже 2 день курю MSDN, ниче толкового нет, одна вода и разговоры про абстрактных коней в вакууме.
          Ну дык. Тема ACLs одна из самых сложных в WinAPI. Зато она универсальна и едина для любых секьюрити разделов в ОС. Хоть для DCOM, хоть для объектов синхронизации, хоть для файлов, хоть для десктопов... Для всего, меняются только наборы атрибутов. К примеру, к десктопам неприменимо понятие приостановки, к процессам – модификация состояния, а к семафорам – чтение контекста исполнения.
          Для хорошего старта подойдёт вот такая страничка в MSDN, там в примере кода есть почти всё. Но лучше всё-таки почитать Рихтера, у него эта тема рассмотрена вполне внятно. На API это программится довольно муторно, ну так и современный гуй на API уже никто не пишет. Поищи готовые библиотеки, может писал кто.
            Цитата Qraizer @
            Но лучше всё-таки почитать Рихтера, у него эта тема рассмотрена вполне внятно. На API это программится довольно муторно, ну так и современный гуй на API уже никто не пишет. Поищи готовые библиотеки, может писал кто.

            Qraizer, почитать Рихтера - это та книга, о которой я думаю(Создание эффективных win32 приложений с учетом специфики 64-разрядной системы )? Я про него как то и забыл! Спасибо гляну.
            По поводу что универсальная штука - это то понятно. Меня смущает работа напрямую с реестром.
            Дело в том, что настройка Launch And Activation Permissions представляет собой структуру SECURITY_DESCRIPTOR, которая записывается в бинарном виде в реестр для определенного COM компонента. По сути то что выше я привел ссылку на dcomperm, основная идея в том, что мы берем и записываем в реестр данные, собственно эти данные и юзает эта настройка. Но как для меня - работа с реестром на прямую - не очень универсальный подход.
            Вот я и создал тему чтоб понять - есть ли еще способ изменить эти настройки, не через реестр.
            Ну а так спасибо, посмотрю что у Рихтера по этому поводу написано.
            Сообщение отредактировано: KILLER -
              Почти наверняка в реестре лежат бинарно сериализированные эти самые ACLs. И это значит, что в разных ОСях они могут отличаться. 32 и 64 бита будут почти наверняка. Так что лучше через ОС API.

              Добавлено
              Ну, в смысле библиотеку какую-нибудь, если найдётся такая.
                Цитата Qraizer @
                И это значит, что в разных ОСях они могут отличаться. 32 и 64 бита будут почти наверняка. Так что лучше через ОС API.

                Вот я тоже об этом думал. Поэтому и тему создал.

                Цитата Qraizer @
                Ну, в смысле библиотеку какую-нибудь, если найдётся такая.

                ДА. Есть одна книга 2000 года, в понедельник скажу как называется - там было написано что нельзя так делать и вообще такое не сделать. Но я нашел примеры работы через реестр.
                И мне тоже кажется что кроме как через реестр до Вин 2008 сервера такое сделать нельзя :(
                  Это ещё почему? Через гуй руками можно сделать? Значит API позволяет. В чём тогда невозможность?
                    Цитата Qraizer @
                    Через гуй руками можно сделать? Значит API позволяет. В чём тогда невозможность?

                    Я ровно так же думал. Раз руками можно сделать, то и через ВинАпи темболее. Но не тут то оно было.
                    В понедельник доберус до работы, там есть одна книженция по COM, вот там написано что низя такое делать. По крайней мере до Вин 2008.
                      Цитата KILLER @
                      Цитата Qraizer @
                      Через гуй руками можно сделать? Значит API позволяет. В чём тогда невозможность?

                      Можно пытаться делать так:
                      1. Спросим яндекса заголовком этой темы.
                      2. Обнаруживаем, что для настройки надо запустить "dcomcnfg.exe"
                      3. Запускаем, вводим пароль администратора.
                      4. Смотрим ProcessExplorer-ом - и видим, что запустилась mmc.exe - "консоль управления".
                      5. Дальше можно попробовать посмотреть её импорт. Конкретные API - вызовы могут натолкнуть
                      на вариант решения.
                      Или на отсутствие такового, с необходимостью использования операций с реестром.
                      6. При необходимости перехватить и посмотреть параметры конкретных
                      системных вызовов, включая операции с реестром (если нужно).
                      Можно пользоваться и каким-нибудь монитором реестра.
                      Сообщение отредактировано: ЫукпШ -
                        Цитата ЫукпШ @
                        Можно пытаться делать так:
                        1. Спросим яндекса заголовком этой темы.
                        2. Обнаруживаем, что для настройки надо запустить "dcomcnfg.exe"
                        3. Запускаем, вводим пароль администратора.
                        4. Смотрим ProcessExplorer-ом - и видим, что запустилась mmc.exe - "консоль управления".
                        5. Дальше можно попробовать посмотреть её импорт. Конкретные API - вызовы могут натолкнуть
                        на вариант решения.
                        Или на отсутствие такового, с необходимостью использования операций с реестром.
                        6. При необходимости перехватить и посмотреть параметры конкретных
                        системных вызовов, включая операции с реестром (если нужно).
                        Можно пользоваться и каким-нибудь монитором реестра.

                        Чтоб так посмотреть - нужно устанавливать систему нужную, плюс в там могут быть свои функции, не винапишные. Мне же нужно не просто реализовать данную фичу, а с поддержкой минимальной версии Вин сервер 2003.
                        В принципе я уже решил данную задачу через реестр.
                          Цитата KILLER @
                          Чтоб так посмотреть - нужно устанавливать систему нужную, плюс в там могут быть свои функции, не винапишные.

                          Да, конечно.
                          Устанавливаем нужную систему в виртуальной машине.
                          Win2003 хорошо работает в VirtualBox-е.
                          Всё равно нужно тестировать приложение где-то - а как же иначе ? :huh:
                          И так для всех систем, для которых предназначено приложение.
                          ---
                          Исследование как раз и заключается в поиске ответа на вопрос:

                          "Работа возможна только через реестр или существуют функции WINAPI, которые
                          выполняют роль оболочки вокруг функций реестра, для выполнения этой задачи ?"
                            Цитата ЫукпШ @
                            Устанавливаем нужную систему в виртуальной машине.
                            Win2003 хорошо работает в VirtualBox-е.
                            Всё равно нужно тестировать приложение где-то - а как же иначе ? :huh:
                            И так для всех систем, для которых предназначено приложение.

                            Мне нужно было это сделать за пол дня, по крайней мере я так расчитывал, а улетело 3-4 дня. Если бы я начал все ставить и сканировать - где что вызывается, я бы убил неделю только на установку разных систем + так и не нашел бы решение. Так как если бы все сводилось к вызову пары функций - я бы это нашел в гугле или в какой нибудь книге.
                            А по поводу как иначе - мое дело написать используя АПИ которое удовлетворяет минимальным требованиям и проверить на одной системе как это все работает. Дальше уже проблема тестера. Если не заведется на Вин Сервер 2003, тогда уже буду дальше курить. Но ИМХО заведется, потому как все функции которые использовал удовлетворяют минимальным требованиям.
                            Сообщение отредактировано: KILLER -
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0399 ]   [ 16 queries used ]   [ Generated: 29.03.24, 15:47 GMT ]