Я пытаюсь написать оболочку C++ для COM-сервера вне процесса (на другом компьютере). Я надеюсь скрыть всю связанность с COM-связью у пользователей этого класса.Возможно ли копирование защитного одеяла прокси из одного объекта в другой?
Требования безопасности заставляют меня вызывать CoSetSecurityBlanket на прокси-сервере сервера. То есть:
CoCreateInstance(CLSID_OutOfProcServer, &proxy);
CoSetProxyBlanket(proxy);
(У меня много параметров). Кроме того, я должен указать учетные данные в этом вызове с , для чего требуется локальная учетная запись.
Теперь вот в чем проблема. На этом сервере множество методов, которые возвращают интерфейсы, и каждый из этих интерфейсов является новым прокси-сервером на моей стороне. Таким образом, я должен позвонить CoSetProxyBlanket()
каждый раз, когда я получу его. Вот что я хочу сделать:
- У меня обертка скрыть CoSetProxyBlanket вызовов (достаточно легко)
- Избегайте хранения учетных данных в памяти
До сих пор, у меня (дьявольски трудно!) попробовал копировать одеяло с одного объекта на другой, используя CoQueryProxyBlanket
и CoSetProxyBlanket
. Это не работает, потому что я не могу восстановить учетные данные (если я не храню их в памяти —, которых я бы хотел избежать).
Что действительно расстраивает, так это то, что у меня есть аутентифицированное соединение с сервером. Кажется, я должен уметь копировать свой контекст безопасности в новый прокси. (Или, по крайней мере, сообщить COM, чтобы сделать это для меня, когда он создает новый прокси.) Есть ли способ сделать это, или я застрял хранить учетные данные?
Спасибо за предложение, но это пока не помогает. Помните, что это локальная учетная запись на удаленном компьютере, поэтому я не могу использовать LogonUser для получения токена олицетворения. –