2009-08-20 72 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