2009-08-20 100 views
1

好的,我有一个IE浏览器的插件,当安装需要(在用户的权限)重新启动IE浏览器。在Vista上调用CoCreateInstance时可以降低权限级别吗?

为此,我有一个由安装程序调用的DLL。它的工作原理,但问题是,当在Vista上重新启动IE时,它将以安装程序的管理员权限重新启动,由于多种原因,这是一个问题。

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

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

+0

您是否知道可以将线程模拟为另一个用户的SetThreadToken()? – sharptooth 2009-08-20 08:51:15

+0

通常情况下,我发布了这个问题后,我刚刚发现了有关此权利的一些信息,SetThreadToken似乎是解决方案的一部分。我现在要试一试,看看它是否适合我的需求。 – Gerald 2009-08-20 08:56:17

回答

1

好吧,我发现从这里的解决方案:

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

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

+0

您确定您可以在此处转发来自其他网站的内容吗? – sharptooth 2009-08-20 09:21:18

+0

我会小心地尝试从该线程返回接口指针 - 存根绑定到它们创建的公寓,并且当您调用CoUninitialize()时,公寓将被终止,并且您的IWebBrowser2存根也会被占用。只要使用接口指针,您可能需要保持线程/组件一直存活。 – 2009-08-20 13:15:57

+0

@sharptooth,好点,我删除了内容,只是离开了链接到其他网站。 – Gerald 2009-08-20 19:35:19