2016-04-20 16 views
-3

我在我的系統中的兩個用戶的權利:庫具有不同的用戶比可執行文件調用它

username: superuser pass:aaa //user that has many rights 
username: nothing pass:bbb //user that has minimum rights 

我有ececutable aaa.exe調用庫bbb.dll的功能。

用戶nothing運行executabe aaa.exeddd.dll應該只訪問超級用戶的資源。 bbb.dll可以超級用戶身份登錄並獲得權限嗎?如何實現它?我應該爲此使用哪些API函數?

+0

實際上,您應該使用兩個進程 –

+0

DLL沒有安全令牌,進程確實有 - 特別是線程會(通過模擬)。 – Ajay

回答

0

如果用戶完全不同,並且您擁有足夠鈍的位置的超級用戶的登錄憑據,則可以在進入dll函數時使用LogonUserImpersonateLoggedOnUser

然而,這非常脆弱,因爲非超級用戶在技術上可以訪問超級用戶憑證,除非您在某種鎖定的沙箱中運行其應用程序。

如果你試圖調用UAC,那麼最強大的解決方案將有ddd.dll產卵運行升高工人exe文件。您可以使用ShellExecute/Ex(),將lpOperation設置爲"runas"以強制提升。如果exe文件顯示出來,您可以將lpOperation設置爲NULL或"open",並根據需要讓UAC正常提示。無論哪種方式,這都會調用系統自己的提升GUI,這會提示用戶升級自己的帳戶,或選擇其他管理員(超級用戶)帳戶來完成他們的操作。

+1

另一種選擇是將DLL本身實現爲COM對象,然後EXE可以使用[COM Elevation Moniker](https://msdn.microsoft.com/en-us/library/windows/desktop/ms679687.aspx)在需要時使用UAC提示在不同的用戶上下文中實例化DLL對象。無需產生單獨的過程。 –

+0

我看到你已經編輯了我對引用調用CreateProcess的回覆。我很確定CreateProcess不會觸發UAC GUI - 它只是返回一個錯誤代碼。必須使用ShellExecute來觸發提升提示。 –

+0

你說得對,我忘記了。自從我必須處理UAC提升問題以來,已經有一段時間了。 –

相關問題