2009-08-28 119 views
0

在模擬客戶端的服務中(使用ImpersonateNamedPipeClient),我嘗試調用CreateProcessAsUser。 可執行文件名是位於第三臺計算機上的UNC路徑(既不是服務器也不是連接到管道的客戶端)。從模擬令牌的網絡登錄

調用失敗,錯誤代碼爲5(ACCES DENIED)。我試圖使用WNetAddConnection2在服務器調用ImpersonateNamedPipeClient之前從客戶端(在將被模擬的令牌的上下文中)對客戶端進行身份驗證,但我仍然得到相同的錯誤。

我該如何驗證模擬賬戶(假設服務器只有模擬令牌)才能訪問可執行文件?

回答

0

我的Win32相當生鏽,所以這可能是在黑暗中拍攝的,但是您是否嘗試過使用CreateProcessAsUser函數而不是CreateProcess?根據MSDN Documentation,它將在受限令牌上運行。如果我沒有記錯,模仿標記就足夠了。

希望有所幫助。

+0

我在我的問題中犯了一個錯誤,當然我使用CreateProcessAsUser。關鍵是該令牌是從ImpersonateNamedPipeClient獲取無法訪問網絡。 (我編輯了我的問題) – 2009-08-28 17:31:07

+0

正在模擬的用戶需要網絡訪問權限,並且需要在第三臺機器上擁有權限。你的情況是否屬實? – 2009-09-02 00:34:41

0

CreateProcessAsUser()需要一個主令牌,而不是一個模擬的令牌。您可以使用DuplicateTokenEx()從模擬的令牌獲取主令牌。 CreateProcessAsUser()的文檔甚至可以這麼說。

+0

感謝您的幫助。我已經使用DuplicateTokenEx。我剛剛將模擬級別從SecurityImpersonation更改爲SecurityDelegation,但如果可執行文件是遠程的,我仍然會得到相同的錯誤。 – 2009-09-02 12:55:17