我已閱讀關於CreateProcessAsUser堆棧溢出的所有帖子,並且有很少解決的問題,所以我沒有屏住這一口氣。但似乎我肯定錯過了一些東西,所以它可能很容易。LogonUser - > CreateProcessAsUser從系統服務
目標操作系統是Windows XP。我有一個作爲「本地系統」運行的服務,我想從中創建一個以不同用戶身份運行的進程。對於那個用戶,我有用戶名和密碼,所以LogonUser會很好,我爲用戶獲得一個令牌(在這種情況下,是一個管理員帳戶)。然後我嘗試使用該令牌調用CreateProcessAsUser,但它失敗,因爲該令牌沒有附帶SeAssignPrimaryTokenPrivilege - 但是,它確實有SeIncreaseQuotaPrivilege。 (我使用GetTokenInformation轉儲與該令牌關聯的所有特權。)根據CreateProcessAsUser的MSDN頁面,您需要兩種特權才能成功調用CreateProcessAsUser。
它也說你不需要SeAssignPrimaryTokenPrivilege,如果你傳遞給CreateProcessAsUser()的令牌是「調用進程的主令牌的受限制版本」,我可以使用CreateRestrictedToken()創建它,但隨後它將與本地系統用戶相關聯,而不是我嘗試運行此過程的目標用戶。
那麼,我將如何創建一個登錄令牌既是調用進程的主令牌的受限版本,又與不同的用戶關聯?謝謝!
注意,這裏我們就不再需要用戶互動 - 這一切都無人看管的 - 因此沒有必要做這樣的東西抓WINSTA0等
GetProcessAsUser失敗後GetLastError返回什麼? – Anders 2010-06-03 18:32:10
你解決了嗎?我也需要一個解決方案:) – AgentFire 2013-05-31 07:56:32
谷歌Chrome瀏覽器的各位也解決了這個問題,並且使用了一個存在於XP中的未公開的啓動服務器API。如果您可以爲想要創建的用戶獲取一個令牌過程如下,你可以在這裏遵循下面的代碼:http://src.chromium.org/chrome/trunk/src/remoting/host/win/launch_process_with_token.cc – 2013-07-19 21:30:07