С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
1

DCOM авторизация

20.01.2017, 17:44. Показов 2026. Ответов 2
Метки dcom, rpc (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
Можно ли создать экземпляр удалённого COM сервера и работать с ним, не имея "одинаковых" пользователей в системах? Поэкспериментировав со структурой COAUTHINFO, получилось создать экземпляр (в рантайме задаю хост, логин и пароль), однако, вызов метода возвращает ошибку ERROR_ACCOUNT_DISABLED, при дефолтной авторизации (указатель на COAUTHINFO в структуре COSERVERINFO нулевой) и наличии нужной учётки метод вызывается.
Так заполнена структура:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        COSERVERINFO si{ 0 };
        COAUTHINFO ai{ 0 }i;
        COAUTHIDENTITY aidi{ 0 };
 
        aid.Domain = (USHORT*)host;
        aid.DomainLength = wcslen(host);
        aid.User = (USHORT*)user;
        aid.UserLength = wcslen(user)
        aid.Password = (USHORT*)pass;
        aid.PasswordLength = wcslen(pass);
        aid.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
 
        ai.dwAuthnSvc = RPC_C_AUTHN_WINNT;
        ai.dwAuthzSvc = RPC_C_AUTHZ_NONE;
        ai.dwAuthnLevel = RPC_C_AUTHN_LEVEL_DEFAULT;
        ai.dwImpersonationLevel = RPC_C_IMP_LEVEL_IMPERSONATE;
        ai.pAuthIdentityData = &aid;
        ai.dwCapabilities = EOAC_NONE;
 
        si.pwszName = host;
        si.pAuthInfo = &ai;
Возможно ли заставить "работать" экземпляр таким образом? И главный вопрос - как?
Есть мнение, что нужно пользоваться функцией CoInitializeSecurity, но пока не выяснил как.

Добавлено через 6 часов 16 минут
Используя функцию CoSetProxyBlanket к полученному интерфейсу иногда стало что-то получаться (внезапно проходил вызов метода!), но то ли я "достал" DCOM то ли это так и должно быть, но попытки получения интерфейса с последующей попыткой вызова метода, стали выдавать ошибки с переменным успехом (как правило E_ACCESSDENIED). Как настроить параметры аутентификации? Я отдыхать...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2017, 17:44
Ответы с готовыми решениями:

Программная настройка DCOM
Нужно программно настроить DCOM.Меняю в реестре (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole)...

Как запустить DCOM сервер?
Добрый день! Мне необходимо будет написать программу с использованием DCOM. Cажусь разбираться с...

Asp.net+iis+dcom=ошибка при вызове функций DCOM сервера
В роли DCOM сервера выступает собственно такая вещь, как OPC сервер(...

DCOM-клиент в виде сервиса не соединяется с DCOM-сервером!?
DCOM-клиент написан как сервис (с окном). Если запускаешь как сервис на той же машине что и...

2
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
21.01.2017, 12:56 2
Цитата Сообщение от Operok Посмотреть сообщение
попытки получения интерфейса с последующей попыткой вызова метода, стали выдавать ошибки с переменным успехом (как правило E_ACCESSDENIED). Как настроить параметры аутентификации?
А в dcomcnfg.exe пробовал настраивать параметры безопасности COM-сервера?
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
23.01.2017, 11:19  [ТС] 3
Параметры по большей части не трогал, в правах доступа в и разрешениях на запуск и активацию проставил галочки "разрешить" всем группам/пользователям.
В свойствах по умолчанию сегодня уже выбрал уровень олицетворения с "определить" на "олицетворение" (уровень проверки подлинности по умолчанию "подключиться"), у самого COM сервера выбрал уровень проверки подлинности на "подключиться" (было "отсутствует"). Теперь CoCreateInstanceEx всегда возвращает E_ACCESSDENIED или 0x800706BA (The RPC server is unavailable), при этом успешно создать экземпляр иногда получается, если запустить приложение не из под студии (из под студии запускал в Release). Параметры проверки: RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, RPC_C_AUTHN_LEVEL_CONNECT, RPC_C_IMP_LEVEL_IMPERSONATE (не ясно на что влияет, если в настройках DCOM было "определить", то CoCreateInstanceEx выполнялся только с этим параметром).
Если не вызывать CoSetProxyBlanket для созданного экземпляра, то вызов любого метода возвращает ошибку ERROR_ACCOUNT_DISABLED, что, как я понял, означает что этот вызов делается с параметрами "по умолчанию", а учетной записи для этого нет, значит CoSetProxyBlanket нужен (или альтернатива), но с какими параметрами? Теми же что и вызывается CoCreateInstanceEx?
0
23.01.2017, 11:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2017, 11:19
Помогаю со студенческими работами здесь

COM, DCOM, COM+, MTS
Вопрос для 'ГУРУ'! Если вы работали с этими технологиями, то поделитесь впечатлениями: что более...

Использование DCOM
Такая вот проблемка возникла. На сервере стоит программа (прокся). На рабочей машине стоит консоль...

Литература по DCOM
Посоветуйте литературу, плиз! БД имеет трехзвенную архитектуру. На Aplication sever лежит куча...

Ошибка DCOM!?
Подскажите: Ошибка DCOM "Указанная служба не может быть запущена, поскольку она отключена или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru