是否可以将代理安全毯从一个对象复制到另一个对象?

时间:2013-02-13 22:35:21

标签: windows com dcom

我正在尝试为进程外COM服务器(在另一台机器上)编写C ++包装器。我希望隐藏来自班级用户的所有与COM相关的肮脏行为。

安全要求迫使我在服务器代理上调用CoSetSecurityBlanket。那就是:

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

(我遗漏了很多参数)。此外,我必须在此调用中指定凭据,因为服务器需要本地帐户

现在问题就在于此。这个服务器有很多返回接口的方法,每个接口都是我这边的全新代理。因此,每次我拿到CoSetProxyBlanket()时都要打电话给CoQueryProxyBlanket。这就是我想要完成的事情:

  1. 让我的包装器隐藏CoSetProxyBlanket调用(很简单)
  2. 避免将凭据存储在内存中(非常困难!)
  3. 到目前为止,我已尝试使用CoSetProxyBlanket和{{1}}将毯子从一个对象复制到另一个对象。这不起作用,因为我无法恢复凭据(除非我将它们存储在内存中 - 我想避免使用它)。

    真正令人沮丧的是我有一个经过身份验证的服务器连接。看起来我应该能够将其安全上下文复制到新代理中。 (或者至少告诉COM在创建新代理时为我做这件事。)有没有办法做到这一点,还是我坚持存储凭证?

1 个答案:

答案 0 :(得分:0)

试试这个:

  1. 通过调用LogonUser()获取模拟令牌并存储此令牌而不是凭据
  2. 带有令牌
  3. 的ImpersonateLoggedOnUser()
  4. 将authinfo设置为NULL的代理毯设置为
  5. 了RevertToSelf()
  6. 我没有试过这个,只是提出一个想法......