【问题标题】:Is it possible to lower the privilege level when calling CoCreateInstance on Vista?在 Vista 上调用 CoCreateInstance 时是否可以降低权限级别?
【发布时间】:2009-08-20 08:44:46
【问题描述】:

好的,我有一个 IE 插件,安装后需要(在用户许可的情况下)重启 IE。

为此,我有一个由安装程序调用的 DLL。也可以,但是问题是在Vista上重启IE的时候,是用安装程序的管理员权限重启的,这个问题有很多原因。

我正在使用 CoCreateInstance 来启动 IE,以便获得 IWebBrowser2 接口的一个实例,以便对其执行一些操作。

所以我的问题是,是否可以从以管理员权限运行的应用程序调用 CoCreateInstance,从而使生成的 COM 对象实例继承基本用户权限而不是调用应用程序的管理员权限?

【问题讨论】:

  • 您知道 SetThreadToken() 可以将线程冒充为另一个用户吗?
  • 像往常一样,我刚刚发布了这个问题后就发现了一些关于此的信息,而 SetThreadToken 似乎是解决方案的一部分。我现在要试一试,看看它是否能满足我的需要。

标签: c++ com windows-vista uac


【解决方案1】:

好的,我从这里找到了解决方案:

http://social.msdn.microsoft.com/Forums/cs-CZ/ieextensiondevelopment/thread/78a2bc18-1920-4e58-af7e-48dbcebe7643

我需要从我的安装程序 DLL 启动一个新线程,并在该线程上模拟当前用户,然后设置低完整性级别,并使用 CLSCTX_ENABLE_CLOAKING 上下文创建 COM 实例。

【讨论】:

  • 您确定可以在此处转发其他网站的内容吗?
  • 我会小心尝试从该线程封送接口指针 - 存根绑定到它们创建的单元,当你调用 CoUninitialize() 时,单元被杀死,并且你的 IWebBrowser2 存根也是。只要使用接口指针,您可能需要保持线程/单元处于活动状态。
  • @sharptooth,很好,我删除了内容,只留下了指向其他网站的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 2021-11-08
相关资源
最近更新 更多