2013-09-27 35 views
6

在Windows Vista及更高版本中,即使用戶提供的是管理員,LogonUser也會返回非特權令牌。因此,當您使用該標記模擬時,您不會被提升。給定一個管理員用戶的正確用戶名和密碼,你如何運行對該管理員具有提升權限的代碼?給定用戶名和密碼,你如何冒充該用戶提升?

+0

您想模仿AD帳戶或本地帳戶嗎? – Botonomous

+1

活動目錄,主要是 - 儘管如果它適用於本地,那也會很棒! –

回答

0

如果你正在寫一個Windows服務,使用LOGON32_LOGON_SERVICE代替LOGON32_LOGON_INTERACTIVELOGON32_LOGON_NEW_CREDENTIALS將導致特權令牌,只要您要模擬的用戶具有「作爲服務登錄」權限即可。

這不提供一個通用的解決方案(如果你正在編寫面向用戶的應用程序,它將不起作用),但足以解決我遇到的具體問題。

1

我剛剛與this example合作,它實際上工作正常。 我想,如果你想運行在這種情況下代碼,就必須設置當前線程校長:

Thread.CurrentPrincipal = new System.Security.Principal.WindowsPrincipal(WindowsIdentity.GetCurrent());