给定用户名和密码,您如何冒充该用户?

时间:2013-09-27 12:11:32

标签: c# impersonation elevated-privileges

在Windows Vista及更高版本中,LogonUser会返回非特权令牌,即使用户提供的是管理员也是如此。因此,当您模拟使用该令牌时,您不会提升。给定管理员用户的正确用户名和密码,如何运行具有该管理员的提升权限的代码?

2 个答案:

答案 0 :(得分:1)

我刚与this example合作,实际上工作正常。 我想如果你想在这个上下文中运行代码,你必须通过以下方式设置当前线程主体:

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

答案 1 :(得分:0)

如果您正在编写Windows服务,使用LOGON32_LOGON_SERVICE代替LOGON32_LOGON_INTERACTIVELOGON32_LOGON_NEW_CREDENTIALS将导致特权令牌,只要您要模拟的用户已“登录”作为服务'权限。

这不提供一般解决方案(如果您正在编写面向用户的应用程序,它将无效),但足以解决我遇到的具体问题。