Re[3]: Вопрос все о том же E_ACCESSDENIED
От: kzua  
Дата: 07.01.05 10:45
Оценка:
Здравствуйте, Glaz, Вы писали:

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


K>>"FAQ: COM Security Frequently Asked Questions," Knowledge Base article #Q158508"


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


K>>3. Why does IConnectionPoint::Advise not work?

K>>4. I receive E_ACCESSDENIED from CoCreateInstanceEx. Why?

G>Спасибо за линк.

G>Дело в том, что я не использую механизм точек подключения и метод Advise(IUnknown** ppUnk) — мой собственный.

Дело не в этом.

G>Я не знаю где поставить вызов CoInitializeSecurity в клиенте. Он возвращает ошибку, а настройки безопасности прописанные для данного компонента в реестре не используются.


G>Пробовал поставить в функцию DllRegisterServer. При регистрации компонента CoInitializeSecurity срабатывает удачно, но при запуске та же проблема. Видимо при запуске CoInitializeSecurity вызывается неявно еще раз.


Нет туда пихать не надо.

G>Прочитав статью Влада и рассмотрев его пример понял, что с dll такие фокусы не проходят. Получается, что для COM-объектов расположенных в dll защиту можно настроить только(!) вручную. На мой взгляд это бред какой-то. Неужели нет какого-либо способя настроить защиту dll программно?


CoInitializeSecurity должна быть вызвана после CoInitialize(Ex) до первого вызова CoCreateInstance.
Соответственно это не про DLL, а про EXE.

G>Имеется сервер, реализованный в виде ATL сервиса, и клиент в виде dll. Все создано при помощи мастера в VS 2003.


Надо понимать, что "клиент в виде dll" является сервером по отношению к другим приложениям.?
Вот в этих клиентах и нужно делать вызов CoInitializeSecurity.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.