Здравствуйте, 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.