windows - 是否可以将代理安全保护层从一个对象复制到另一个对象?

标签 windows com dcom

我正在尝试为进程外 COM 服务器(在另一台机器上)编写 C++ 包装器。我希望对类(class)的用户隐藏所有与 COM 相关的麻烦。

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

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

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

问题来了。这个服务器有很多返回接口(interface)的方法,每一个接口(interface)都是我这边一个全新的代理。因此,每次我都必须调用 CoSetProxyBlanket()。这是我想要完成的:

  1. 让我的包装器隐藏 CoSetProxyBlanket 调用(很简单)
  2. 避免将凭据存储在内存中(非常困难!)

到目前为止,我已尝试使用 CoQueryProxyBlanketCoSetProxyBlanket 将毯子从一个对象复制到另一个对象。这不起作用,因为我无法恢复凭据(除非我将它们存储在内存中——我想避免这种情况)。

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

最佳答案

试试这个:

  1. 通过调用 LogonUser() 获取模拟 token 并存储此 token 而不是凭据
  2. 使用 token 模拟LoggedOnUser()
  3. 将 authinfo 设置为 NULL 设置代理毯
  4. RevertToSelf()

我没试过这个,只是提出一个想法......

关于windows - 是否可以将代理安全保护层从一个对象复制到另一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14864551/

相关文章:

windows - Wix 中的 PID 模板

windows - rtlGetVersion 错误的想法至于为什么?

windows - 为什么默认情况下允许 "local launch"用于进程外服务器,但 "local activation"不允许?

C# DCOM 事件绑定(bind)未经授权的异常

c# - COM/DCOM : Server stub does not allocate memory for new methods in existing interface

windows - 适用于 Windows Mobile 6 的加速度计 API

windows - 更改几行后 SQLRowCount 的行为发生变化

.net - 是否可以向 COM 互操作调用者公开 C# 枚举,如果可以,如何?

.net - Reg-Free COM 是否与互操作一起使用?

c++ - native 代码中的托管 dll(通过 com)。它是在 com 服务器进程中还是进程外?