2013-02-13 7 views
3

Я пытаюсь написать оболочку C++ для COM-сервера вне процесса (на другом компьютере). Я надеюсь скрыть всю связанность с COM-связью у пользователей этого класса.Возможно ли копирование защитного одеяла прокси из одного объекта в другой?

Требования безопасности заставляют меня вызывать CoSetSecurityBlanket на прокси-сервере сервера. То есть:

CoCreateInstance(CLSID_OutOfProcServer, &proxy); 
CoSetProxyBlanket(proxy); 

(У меня много параметров). Кроме того, я должен указать учетные данные в этом вызове с , для чего требуется локальная учетная запись.

Теперь вот в чем проблема. На этом сервере множество методов, которые возвращают интерфейсы, и каждый из этих интерфейсов является новым прокси-сервером на моей стороне. Таким образом, я должен позвонить CoSetProxyBlanket() каждый раз, когда я получу его. Вот что я хочу сделать:

  1. У меня обертка скрыть CoSetProxyBlanket вызовов (достаточно легко)
  2. Избегайте хранения учетных данных в памяти

До сих пор, у меня (дьявольски трудно!) попробовал копировать одеяло с одного объекта на другой, используя CoQueryProxyBlanket и CoSetProxyBlanket. Это не работает, потому что я не могу восстановить учетные данные (если я не храню их в памяти —, которых я бы хотел избежать).

Что действительно расстраивает, так это то, что у меня есть аутентифицированное соединение с сервером. Кажется, я должен уметь копировать свой контекст безопасности в новый прокси. (Или, по крайней мере, сообщить COM, чтобы сделать это для меня, когда он создает новый прокси.) Есть ли способ сделать это, или я застрял хранить учетные данные?

ответ

0

Попробуйте это:

  1. Получить олицетворения маркер по телефону LogonUser() и хранить этот маркер вместо учетных
  2. ImpersonateLoggedOnUser() с токена
  3. Установить прокси-одеяло с authinfo набор в NULL
  4. RevertToSelf()

Я не пробовал, просто предлагая идею ...

+0

Спасибо за предложение, но это пока не помогает. Помните, что это локальная учетная запись на удаленном компьютере, поэтому я не могу использовать LogonUser для получения токена олицетворения. –