Вопрос все о том же E_ACCESSDENIED
От: Glaz  
Дата: 06.01.05 13:15
Оценка:
Имеется сервер, реализованный в виде ATL сервиса, и клиент в виде dll. Все создано при помощи мастера в VS 2003.
Клиент создает объект сервера (CoCreateInstance).
Затем регистрируется на нем, передавая одним из параметров метода регистрации указатель на свой интерфейс
( pServer->Advise(IUnknown** ppUnk) ).
Сервер ( в реализации Advise ) получает необходимые указатели на интерфейсы клиента и взаимодействует с ним.

Задача: заставить все это работать не настраивая параметры защиты вручную. ОС Win2000 SP4.

Клиент с сервером работает без проблем, а вот сервер с клиентом никак. При попытке со стороны сервера запросить необходимый интерфейс ( (*ppUnk)->QueryInterface(...) ) получаю E_ACCESSDENIED.

Изучил много постов на эту тему, но у всех постившихся и сервер и клиент реализованы в exe. В этом случае статья "Защита в DCOM/COM+" все проблемы решает.

Но в этой же статье я прочитал следующую фразу:
"Не стоит пытаться вызвать эту функцию (CoInitializeSecurity) из COM-сервера, расположенного в DLL, даже если DLL зарегистрирована в COM+-приложении, ибо к моменту создания пользовательского объекта данная функция точно уже вызвана самим COM."

Так как же быть в таком случае? Получается, что для COM-объектов расположенных в dll защиту программно не настроить?

А работает все только когда я изменяю настройки безопасности по умолчанию в dcomcnfg.
Но меня этот вариант совершенно не устраивает.
Помогите пожалуйста.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.